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
プレビュー