Zawsze uczono mnie, że skutki uboczne w danym if
stanie są złe. Chodzi mi o to że;
if (conditionThenHandle()) {
// do effectively nothing
}
... w przeciwieństwie do;
if (condition()) {
handle();
}
... i rozumiem to, a moi koledzy są szczęśliwi, ponieważ tego nie robię i wszyscy wracamy do domu o 17:00 w piątek i wszyscy mają wesoły weekend.
Teraz ECMAScript5 wprowadził metody takie jak every()
i some()
do Array
i uważam je za bardzo przydatne. Są czystsze niż for (;;;)
, dają ci inny zasięg i sprawiają, że element jest dostępny przez zmienną.
Jednak podczas sprawdzania poprawności danych wejściowych częściej niż nie używam every
/ some
w warunku do sprawdzania poprawności danych wejściowych, a następnie używam every
/ some
ponownie w treści, aby przekonwertować dane wejściowe na użyteczny model;
if (input.every(function (that) {
return typeof that === "number";
})) {
input.every(function (that) {
// Model.findById(that); etc
}
} else {
return;
}
... kiedy chcę to zrobić;
if (!input.every(function (that) {
var res = typeof that === "number";
if (res) {
// Model.findById(that); etc.
}
return res;
})) {
return;
}
... co daje mi skutki uboczne w if
stanie, który jest zły.
Dla porównania jest to kod wyglądający na stary for (;;;)
;
for (var i=0;i<input.length;i++) {
var curr = input[i];
if (typeof curr === "number") {
return;
}
// Model.findById(curr); etc.
}
Moje pytania to:
- Czy to zdecydowanie zła praktyka?
- Czy używam (mis | ab)
some
ievery
( powinienem używaćfor(;;;)
do tego?) - Czy istnieje lepsze podejście?
some
, chcę coś zrobić z elementem, jeśli używam every
, chcę zrobić coś z tymi wszystkimi elementami ... some
i every
nie pozwól mi uzyskać dostępu do tych informacji, więc albo nie mogę użyj ich, albo muszę dodać efekty uboczne.
some
w moim if
stanie, aby ustalić, czy określony element w tablicy wykazuje określoną właściwość, 9/10 muszę działać na tym elemencie w moim if
ciele; teraz, ponieważ some
nie mówi mi, który z elementów wykazywał właściwość (tylko „jeden zrobił”), mogę albo użyć some
ponownie w ciele (O (2n)), albo mogę po prostu wykonać operację wewnątrz warunku if ( co jest złe, ponieważ jest to efekt uboczny w głowie).
every
oczywiście.