
139
5.4 部分適用
カリー化された関数を使用することによって、「流暢な」インターフェイスを持っ
た関数を生成できるという具体的な恩恵を得ることが理解できた思います。コードが
実際の動作の描写により近くなればなるほど良いものになります。今後も本書ではこ
のような「流暢な」関数への到達を試みます。
5.3.4
JavaScript
におけるカリー化のデメリット
curry2
や
curry3
といった関数は素敵ですが、
curryAll
といった任意の段階までカ
リー化できる関数を提供したほうがよいのではないでしょうか? 実際にこのよう
な関数を定義することはできますが、私自身の経験からは、あまり実用的とは言え
ません。
Haskell
や
Shen
といった、関数が自動的にカリー化されるようなプログラ
ミング言語は、多段階のカリー化関数を有効活用できるような
API
を備えています。
JavaScript
は可変数の引数が許可されているため、一般的にカリー化には不利に働
き、また混乱を招くこともあります。
Underscore
のライブラリには、引数の型や数
によって異なる動作を行う関数があります。そのため、カリー化を行うことは不可能
ではありませんが、十分に注意して行う必要があります。
curry2
や
curry3
を利用すると折々便利で、これらの
API
を備えるということは関
数合成に対するエレガントなアプローチとなりえます。しかしカリー化よりも、任意
の深さまでの部分適用がより一般的に使われています。次節ではこの部分適用を紹介