Меня всегда учили, что наличие побочных эффектов в if
состоянии - это плохо. Я имею в виду;
if (conditionThenHandle()) {
// do effectively nothing
}
... в отличие от;
if (condition()) {
handle();
}
... и я понимаю это, и мои коллеги счастливы, потому что я не делаю этого, и мы все идем домой в 17:00 в пятницу, и у всех есть веселые выходные.
Теперь, ECMAScript5 введены такие методы , как every()
и some()
к Array
, и я нахожу их очень полезными. Они чище, чем у for (;;;)
, дают вам другую область и делают элемент доступным для переменной.
Однако при проверке входных данных я чаще всего использую every
/ some
в условии для проверки входных данных, а затем снова использую every
/ some
снова в теле для преобразования входных данных в пригодную для использования модель;
if (input.every(function (that) {
return typeof that === "number";
})) {
input.every(function (that) {
// Model.findById(that); etc
}
} else {
return;
}
... когда то, чем я хочу заниматься;
if (!input.every(function (that) {
var res = typeof that === "number";
if (res) {
// Model.findById(that); etc.
}
return res;
})) {
return;
}
... что дает мне побочные эффекты в if
состоянии, которое плохо.
Для сравнения, этот код будет выглядеть со старым for (;;;)
;
for (var i=0;i<input.length;i++) {
var curr = input[i];
if (typeof curr === "number") {
return;
}
// Model.findById(curr); etc.
}
Мои вопросы:
- Это определенно плохая практика?
- Использую ли я (mis | ab)
some
иevery
( должен ли я использоватьfor(;;;)
для этого?) - Есть ли лучший подход?
some
, я хочу сделать что-то с элементом, если я использую every
, я хочу сделать что-то со всеми этими элементами ... some
и every
не позволяю мне получить доступ к этой информации, поэтому я тоже не могу используйте их, или я должен добавить побочные эффекты.
some
в моем if
состоянии , чтобы определить , имеет ли определенный элемент в массиве определенного свойства, 9/10 Мне нужно работать на этом элементе в моем if
теле; теперь, поскольку some
мне не сообщается, какой из элементов обладает свойством (только «один сделал»), я могу либо some
снова использовать его в теле (O (2n)), либо просто выполнить операцию внутри условия if ( что плохо, потому что это побочный эффект в голове).
every
, конечно.