underscore.jsソースで次のコード行に出くわしました。
function (obj, iterator, context) {
iterator || (iterator = _.identity);
...
}
その構文は次と同等ですか?
if (!iterator) {
iterator = _.identity;
}
ステートメントを1行に減らす以外に、前者の構文を使用することによるパフォーマンス上の利点はありますか?
underscore.jsソースで次のコード行に出くわしました。
function (obj, iterator, context) {
iterator || (iterator = _.identity);
...
}
その構文は次と同等ですか?
if (!iterator) {
iterator = _.identity;
}
ステートメントを1行に減らす以外に、前者の構文を使用することによるパフォーマンス上の利点はありますか?
はい、機能的にはそれと同等です。
この方法で行うことの唯一の利点は、チェックにかかる行が2行少なくなることです。
これはブール短絡評価の効果です。基本的に、ブール式の評価は、その結果が決定されるとすぐに停止します。
true || func()
この場合、func()が呼び出されることはありません。これは、返されるものが何であれ、式全体の値が引き続きであるためtrue
です。
false && func()
同様に、この場合、func()もまったく呼び出されません。これは、func()が何を返しても、式が残るためfalse
です。