Мене завжди вчили, що побічні ефекти в 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
і, звичайно.