私は常に、if
状態に副作用があることは悪いことだと教えられてきました。つまり、
if (conditionThenHandle()) {
// do effectively nothing
}
... とは対照的に;
if (condition()) {
handle();
}
...そして、私はそれを理解しています。私はそれをしなかったので私の同僚は幸せです、そして私たちはすべて金曜日の17:00に家に帰り、誰もが楽しい週末を過ごします。
今、ECMAScript5はto every()
やsome()
to 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.
}
私の質問は:
- これは間違いなく悪い習慣ですか?
- アムI(ミス| AB)を使用して、
some
およびevery
(必要があります私が使用しているfor(;;;)
。このために?) - より良いアプローチはありますか?
some
、私がやりたい何かを私の使用があれば、要素とevery
、私はこれらの要素のすべてに何かをしたい... some
とevery
どちらか私はできませんので、私はその情報にアクセスすることはできません。それらを使用するか、副作用を追加する必要があります。
some
、私の中でif
、配列内の特定の要素は、私が動作する必要がある特定の性質、9/10発揮するかどうかを判断するための条件に私の中にその要素if
本体と、今、としてsome
私に教えてくれないそのプロパティを示した要素の(ちょうど「1がした」)、私はどちらかを使用することができsome
、再び体(O(2N))に、または私はちょうど内部の作業を行うことができる場合(条件頭の中での副作用のため、これは悪いことです)。
every
もちろん、同じことが当てはまります。