Zawsze uczono mnie, że skutki uboczne w danym ifstanie 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 Arrayi 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/ somew 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 ifstanie, 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)
someievery( 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 ... somei everynie pozwól mi uzyskać dostępu do tych informacji, więc albo nie mogę użyj ich, albo muszę dodać efekty uboczne.
somew moim ifstanie, aby ustalić, czy określony element w tablicy wykazuje określoną właściwość, 9/10 muszę działać na tym elemencie w moim ifciele; teraz, ponieważ somenie 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).
everyoczywiście.