関数型プログラミングを使いこなす

関数型プログラミング言語の再発見

関数型プログラミングと聞いて皆さんは何を思い浮かべるでしょうか? 最近登場した新しいプログラミングのムーブメントだと思った方は残念ながら少々勘違いをしています。

関数型プログラミングを実践できるHaskellやOCamlは、比較的古くからあるプログラミング言語です。Haskellは1990年、Ocamlは1996年の誕生とどちらも今から20年以上前に登場しています。その起源をLispまでさかのぼれば、1950年代には姿を見せています。実は特段新しいものではありません。実際には絶えずユーザーがいて、ともに言語も発展してきました。

古くからある関数型プログラミング言語ですが、近年急速に注目を集めています。

理由の1つにメインストリームのプログラミング言語に強い影響力を持つようになったことがあります。JavaやJavaScriptのような著名な言語に関数型プログラミング由来の関数が追加されたと聞いたこともあるのではないでしょうか。関数型プログラミング言語に強く影響をうけたRxJava(ReactiveX)などのライブラリも人気です。Scalaは既存のオブジェクト指向と関数型の混合を目指した言語として注目を集めていました。

関数型プログラミング言語の優れた方法論を輸入することはかなり有用なようです。

なぜこのような形で関数型プログミング言語が再発見されたのか。マルチプロセッサ前提の今日では関数型プログラミング言語の特性が生かされやすい、近年のアプリケーション開発には関数型プログラミング言語の洗練されたデータの取り扱いが適しているなど理由はいくつかあるでしょう。いずれにしても関数型プログラミング言語が現実の問題の解決に役立つというのは間違いなさそうです。

関数型プログラミング言語を学ぶ

関数型プログラミング言語が有用なことは、他言語に与えている影響の大きさからも確かでしょう。

実際に関数型プログラミング言語そのものを使っているケースはあまり見聞きしないかもしれませんが、Facebookなどの巨大な企業でも採用が進み、他に金融分野やデータ分析でも大きな成功を収めています。

エンジニアとしてスキルを向上させるのに、関数型プログラミング言語を学ぶことは大きな流れになりつつあります。

さて、ここで悩ましいのがどの言語で関数型の世界に入り込むかです。

オブジェクト指向言語の関数型プログラミング言語的機能をうまく使って、関数型のようなコードを書く方法は広く知られています。親しんだ言語で関数型のエッセンスが身に付けられれば、学習コストも低く済みお得かもしれません。

ただ、せっかく関数型プログラミングの世界に入るなら本家本元の関数型プログミング言語で入門したいのではないでしょうか? 既存の言語の延長としてではなく、新しくプログミング言語を学ぶのはなかなか負荷の高い学習方法ですが、その分実りも豊かです。あるプログミングのパラダイムを知りたければ、そこに完全に浸かってしまうのが近道ということもあります。

さて、関数型プログミング言語を学ぼうと思い立ったとき、もっとも悩ましいのはどのプログミング言語から入門するかです。

Haskell、OCaml、Common Lisp、Erlang、Clojure...関数型プログミング言語と呼ばれるものは数多くあり、どれを学ぶべきか迷ってしまいます。今まで学んだ言語とはどれも考え方や見た目(文法)が違うので直感で選ぶというのも難しそうですし、各言語からどれを学ぶべきか示唆してくれる情報も多くはありません。

どれも捨てがたい選択肢ですが、もしもどれか1つ選ぶなら、Haskellをおすすめします。

なぜHaskellなのか

Haskellは学べば必ず役に立つ実用性と、新しい考え方に触れられる新奇性の双方に優れた、学習するには理想的な言語です。

Haskellは現代的なビルドツールやパッケージマネージャがあり、ライブラリも活発に開発・公開されています。

静的型付け言語であるため実行速度も速く、並列並行実行のサポートも充実しています。ある程度言語に慣れ親しめば実用的なアプリケーション開発をするための素地は備えています。他言語で開発できるようなものは一通り作れますし、パーサなどHaskellが多くの代言語より優れた分野もあります。

また、Haskellはおそらく多くの人にとって新しいと感じさせる文法の特徴を持っています。純粋関数型プログラミング言語で、遅延評価を採用しています。何を意味するかはおいておくとして、異なるパラダイムにあることは確かです。レイアウトルールや表記方法などもC言語由来の現在主流のものとはだいぶ離れています。これらの新しさは一見すると、とっつきづらさを覚えますが、実際に学習してみると好奇心を満たしてくれるものであることがわかります。

関数型プログミング言語、Haskellを学びたい方には本書がおすすめです。基礎の文法から実際のアプリケーション開発までを漏らさず解説しています。