Меня всегда учили, что наличие побочных эффектов в 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, конечно.