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