JavaScript switch文でできないこと
JavaScriptのswitch文では、各条件でパラメータを受け取って処理することができない。
それに対応するコード。
// switchのラベルに該当する。文字列ではなく関数にすることがミソ
const male = name => pattern => pattern.male(name);
const female = () => pattern => pattern.female();
// パターンマッチ用。条件とパターンを受け取って、対応する処理を実行する。
const match = (data, pattern) => data(pattern);
// 条件(gender)を受け取って対応する処理を実行する
// switch と違うのは条件にパラメータを渡せることと、それを対応する処理で受け取れること(今回の場合maleのname)
// genderが条件(switch文でいうラベル)
// matchの第二引数のオブジェクトが各処理(switch文でいう条件分岐)
const wc = gender => {
return match(gender, {
male: name => `DON'T ENTER ${name}`,
female: () => 'OK'
})
};
// maleの場合はトイレに入れない。かつmaleの引数で渡したnameを条件分岐の処理で使用できる
const result = wc(male('tamibouz'));
console.log(result); //DON'T ENTER tamibouz
// femaleの場合はトイレに入れる。
const result2 = wc(female());
console.log(result2); //OK
参考
関数型プログラミングの基礎 JavaScriptを使って学ぶ Amazon
最近のコメント