読者です 読者をやめる 読者になる 読者になる

論理演算子で関数の引数を入れ替える

JavaScript

論理演算子(&& と ||)を応用する - てっく煮ブログについて、まとめに違和感があった。というか、そもそも普通は逆にするよなぁと思ったので。

function add(a, b){
    addImpl(b && a, b || a);
}
function add2(a, b){
    addImpl(a || b, a && b);
}
function addImpl(a, b){
console.log(a,b)
}
add(1,2);  // 1        , 2
add(0);    // undefined, 0
add(1);    // undefined, 1
add(0,1);  // 0        , 1

add2(1,2); // 1        , 2
add2(0);   // undefined, 0
add2(1);   // 1        , undefined
add2(0,1); // 1        , 0

id:nitoyon さんがあげていたサンプル(add)は第1引数だけが指定された場合に第2引数に入れ替えて次の関数に渡す。

対して、add2は第一引数がネガティブと評価される値(undefined,null,0,NaN,'',false)*1を返す場合、第2引数を第1引数と入れ替える。
add2のほうが実用的。ただ、両方ネガティブでも入れ替えるのはちょっと嫌(けど、それは条件のほうがおかしいのだけど)


ちなみに、jQuery 1.2.1を確認したところ、1858 行目で add2 のほうが使われていた。

*1:これで全部だったはず/falseが抜けていたのはちょっと斬新過ぎました。