次のコードは、lodashのnegate
関数のソースコードです。パラメータの長さが4未満の場合は、apply
の代わりにswitch-case
を直接使用することがわかります。このコードについてどんな魔法?パフォーマンスが向上していますか?スプリットポイントが4の理由は?なぜlodashはネゲート機能でswitch-caseを使用しますか?
function negate(predicate) {
if (typeof predicate != 'function') {
throw new TypeError(FUNC_ERROR_TEXT);
}
return function() {
var args = arguments;
switch (args.length) {
case 0: return !predicate.call(this);
case 1: return !predicate.call(this, args[0]);
case 2: return !predicate.call(this, args[0], args[1]);
case 3: return !predicate.call(this, args[0], args[1], args[2]);
}
return !predicate.apply(this, args);
};
}
わかりませんが、 'switch'は' if..else'ラダーよりも優れています。プラス、少ないタイピング。 – Rajesh
OPの質問は 'if..else'の代わりに' switch'を使う理由ではありません。問題はなぜ条件付きであるかということです。 – JanS
スプリットポイントは4であると思います。なぜなら、oopで3つ以上のパラメータを取るような機能を持たないようにしなければならないからです(自分で繰り返すことができない限り、 。そしておそらくベンチマークもしたでしょう。 'apply'は' call'メソッドより遅いでしょう。 –