Mir wurde immer beigebracht, dass Nebenwirkungen in einem if
Zustand schlecht sind. Was ich meine ist;
if (conditionThenHandle()) {
// do effectively nothing
}
... im Gegensatz zu;
if (condition()) {
handle();
}
... und ich verstehe das, und meine Kollegen sind glücklich, weil ich es nicht tue, und wir gehen alle freitags um 17:00 Uhr nach Hause und alle haben ein fröhliches Wochenende.
Jetzt hat ECMAScript5 Methoden wie every()
und some()
zu eingeführt Array
, und ich finde sie sehr nützlich. Sie sind sauberer als for (;;;)
die anderen, geben Ihnen einen anderen Bereich und machen das Element durch eine Variable zugänglich.
Bei der Validierung von Eingaben verwende ich jedoch häufig every
/ some
in der Bedingung, die Eingabe zu validieren, und verwende dann every
/ some
erneut im Body, um die Eingabe in ein verwendbares Modell umzuwandeln.
if (input.every(function (that) {
return typeof that === "number";
})) {
input.every(function (that) {
// Model.findById(that); etc
}
} else {
return;
}
... wenn ich etwas tun möchte ;
if (!input.every(function (that) {
var res = typeof that === "number";
if (res) {
// Model.findById(that); etc.
}
return res;
})) {
return;
}
... was mir Nebenwirkungen in einem if
Zustand gibt, der schlecht ist.
Im Vergleich dazu ist dies der Code, mit dem ein alter Code aussehen würde for (;;;)
.
for (var i=0;i<input.length;i++) {
var curr = input[i];
if (typeof curr === "number") {
return;
}
// Model.findById(curr); etc.
}
Meine Fragen sind:
- Ist das definitiv eine schlechte Praxis?
- Benutze ich (mis | ab)
some
undevery
( sollte ich dafür ein verwendenfor(;;;)
?) - Gibt es einen besseren Ansatz?
some
, möchte ich etwas mit dem Element machen, wenn ich benutze every
, möchte ich all diesen Elementen etwas antun ... some
und every
mich nicht auf diese Informationen zugreifen lassen, also kann ich es auch nicht benutze sie, oder ich muss Nebenwirkungen hinzufügen.
some
in meinem if
Zustand , um zu bestimmen , ob ein bestimmtes Element in dem Array eine bestimmte Eigenschaft aufweist, 9/10 Ich muß zum Betrieb auf diesem Elemente in meinem if
Körper; Jetzt, da some
mir nicht gesagt wird, welches der Elemente die Eigenschaft aufweist (nur "eines hat es getan"), kann ich es entweder some
wieder im Körper verwenden (O (2n)) oder ich kann die Operation einfach innerhalb der if- Bedingung ausführen ( was schlecht ist, weil es eine Nebenwirkung im Kopf ist).
every
natürlich auch für.