【かりーか】
カリー化 とは?
💡 引数を「一度に全部」ではなく「1つずつ」渡す、関数の分割払い
📌 このページのポイント
- 複数引数の関数を、1引数の関数を連鎖させた形に変換する手法
- 一部の引数だけ先に渡して「部分適用」した新しい関数を作れる
- HaskellやScalaでは言語レベルでサポートされている
- JavaScriptやTypeScriptでもクロージャを使って手動でカリー化できる
カリー化って料理のカレーと関係あるの?
残念ながら食べ物とは無関係だよ(笑)。数学者のハスケル・カリーさんの名前が由来なんだ。カリー化とは、たとえば add(a, b) のように2つの引数を一度に受け取る関数を、add(a)(b) のように1つずつ受け取る形に変換することだよ。
わざわざ1つずつにする意味ってあるの?
大きなメリットは「部分適用」ができること。たとえば add(a)(b) をカリー化しておけば、add(5) と書くだけで「5を足す関数」が作れる。これを addFive として保存しておけば、addFive(3) で8、addFive(10) で15、と再利用できるんだ。
なるほど、設定を途中まで済ませた関数を作っておけるんだね!
そのとおり!実際の開発でも便利で、たとえばログ関数 log(level)(message) をカリー化しておくと、errorLog = log('ERROR') で「エラーログ専用関数」を作れる。設定値を事前に埋め込んだ専用関数を量産できるのがカリー化の強みだよ。
どの言語で使えるの?
カリー化と部分適用って同じものじゃないの?
まとめ:ざっくりこれだけ覚えればOK!
「カリー化」って出てきたら「引数を1つずつ渡せるように関数を変換すること」と思えればだいたいOK!
📖 おまけ:英語の意味
「Currying」 = カリー化
💬 数学者ハスケル・カリーの名前に由来するよ。ちなみにプログラミング言語Haskellも同じ人の名前から来ているんだ