
37
2
章
第一級関数と作用的プログラミング
本章では、関数を第一級要素として取り扱うという関数型プログラミングの基本に
ついて説明します。そして、
map
、
reduce
、
filter
という頻繁に利用する
3
つの関数
の基本的な考え方を説明します。これらの関数に慣れているプログラマーも多いで
しょうが、これらをここで理解しておくことが本書の残りを理解するための土台とな
るはずです。
2.1
第一級要素としての関数
私自身を含む
JavaScript
に慣れたプログラマーには、
JavaScript
を関数型言語と考
える人も少なくありません。ということは、当然ながら、そう考えないプログラマー
も存在することを暗示しています。そう考えない理由としては、関数型プログラミン
グは相対的な定義が行われることが多く、専門家の間で大小さまざまな面で意見が分
かれるということが挙げられます
†
。
これは本当に悲しい事態です。しかし感謝すべきことに、それらの大小さまざまな
関数型プログラミングの定義のほとんどすべてにおいて共通しているポイントがひと
つだけ存在します。関数型プログラミング言語は、第一級関数(
first-class function
)
を容易に利用・生成可能にしている言語であるということです。
このポイントは通常、静的型付け、パターンマッチング、不変性、純粋性といっ
た、関数型プログラミングの他の定義のような特性とともに語られるのをよく見る
でしょう。確かにこれらの特性はいくつかの関数型プログラミング言語について言
い表していますが、広くすべての言語に適用できるものではありません ...