const hoge = (foo, bar) => (v) => foo(v) || bar(v);
foo(v)の結果がnullかundefinedの時にbar(v)を実行させたいので、
foo(v) || bar(v)のようにしているのですが、これだと、foo(v)の結果がfalsyな値の場合、
bar(v)が実行されてしまいます。
const zero = (v) => 0 * v; const double = (v) => 2 * v; console.log( hoge(zero, double)(10) )
この場合だと、0はfalsyなので、20が`返って来てしまいます。
const hoge = (foo, bar) => (v) => { const result = foo(v) return result != null ? result : bar(v); }
一応、このようにfoo(v)の結果をローカル変数に入れてから、foo(v)の結果がnullまたはundefinedではないかをチェックすれば、
期待する動きにはなるのですが、このようにローカル変数を作らないと期待する結果は得られないでしょうか?
const hoge = (foo, bar) => (v) => { return foo(v) != null ? foo(v) : bar(v); }
foo(v)をこのように2回呼ぶことも出来るでしょうが、これは非効率なので避けたいところです。
const hoge = (foo, bar) => (v) => foo(v) || bar(v);
このように全て、引数に渡ってくる値のみで完結させたいのですが、何か方法があれば教えて頂ければ幸いです。
※ 不可能な場合はそれが答えだと思います。
回答3件
あなたの回答
tips
プレビュー