Мене завжди вчили, що побічні ефекти в 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.
}
Мої запитання:
- Це, безумовно, погана практика?
- Чи я (неправильно | ab) використовую
someіevery(чи повинен я використовуватиfor(;;;)для цього?) - Чи є кращий підхід?
some, я хочу зробити щось з елементом, якщо я використовую every, я хочу зробити щось з усіма цими елементами ... someі everyне дозволяти мені отримувати доступ до цієї інформації, тому я не можу використовувати їх, або я повинен додати побічні ефекти.
someв моєму ifстані , щоб визначити , чи має певний елемент в масиві певного властивості, 9/10 Мені потрібно працювати на цьому елементі в моєму ifтілі; тепер, як someне підказує мені, який із елементів виявив властивість (просто "один зробив"), я можу або використовувати some знову в тілі (O (2n)), або я можу просто виконати операцію всередині умови if ( що погано, тому що його побічна дія всередині голови).
everyі, звичайно.