【JS】カリー化の簡単な使い方
こんにちは!このブログ、日付がURLになるから1日1記事しか書けないことに今気づきました。Mizutani(@sirycity)です。まあいっか。
今日はJavaScriptのカリー化についてです。カリー化、言葉は聞いたことあっても理解できてない人いるでしょ?安心して、僕もです。なので今回は簡単で実用的な例を用意しました。見ていこう。
カリー化とは
引数がn個の1つの関数を引数が1個のnつの関数にすること。
…ってさ、これで分かるわけないじゃん?なので実際のコードを見てみよう。カリー化の説明だからカレーにするね。
const curry = (arg1, arg2) => `辛さは${arg1}?${arg2}?`
curry('中辛', '辛口')
// 辛さは中辛?辛口?
まあなんてことはない、ふつうの関数です。これをさっきの例にあてはめると「引数が2個の1つの関数」だね。
ではこれをカリー化してみます。つまり、「引数が1個の2つの関数」を作る。こんな感じ。
const curry = arg1 => arg2 => `辛さは${arg1}?${arg2}?`
curry('中辛')('辛口')
// 辛さは中辛?辛口?
これだけ。ちょっと形が変わったけど、実際のところこんだけ。でもこれ、特にメリットがないなら別にカリー化しなくて良い気もしますね。ところがどっこい、カリー化にはこんなメリットがあるんです…
カリー化の便利な使い方1
学生の頃よくカレー屋さんに行ってたんですが、店によって色々な特色があって辛さとかも色々あるんですよ。でもですよ、どこのお店にも中辛は絶対あるんですよね。こんな風に。
curry('中辛')('辛口')
curry('中辛')('甘口')
curry('中辛')('5辛')
でもこれってちょっと冗長的ですよね。だって、2つの引数のうち1つは中辛って決まってるのに毎回('中辛')
って書かなきゃダメなんです。まだ今回は2つ中1つだから良いですけど、もし10個中9個固定とかだったら毎回9個書かなきゃダメなんです。めんどいよね。
そこでカリー化の出番。何も言わずにコードを見てくれ。
const defaultCurry = curry('中辛')
defaultCurry('辛口')
// 辛さは中辛?辛口?
defaultCurry('甘口')
// 辛さは中辛?甘口?
defaultCurry('5辛')
// 辛さは中辛?5辛?
もう分かったかな?これがカリー化よ。カリー化を使えば引数がたくさんある関数のうちいくつかを固定しとけるってわけさ。めっちゃ便利。中辛ばんざい。
さいごに
今回はカリー化の簡単な説明でした。他にもカリー化は色々なメリットがあってめっちゃ奥深いんだけど、僕もあんま理解してないから今回は初歩的な所の紹介でした。引数をなるべく1つにってのは関数型プログラミングのコツだね!みんなもカリー化、してみてくれよな!