Javaなど,オブジェクト指向や手続き型のプログラミングの経験はあるけれど,関数型のプログラミングは初めてという皆様のための,そして筆者自身のための「関数脳のつくり方」シリーズのSecond Season(First Seasonはこちら)。今回は「モナド」を取り上げます。
私が勝手に関数型プログラミングの「師匠」と呼んでいるujihisa(氏久達博)氏という人がいるのですが,その方曰く
「モナドが理解できた時,悟りがひらける」
私も1カ月以上かけていろいろやってやっとこさ「モナドの悟り」がひらけた様子です。意味がわかった時には,確かにオブジェクト指向のポリモルフィズムがわかった時のような感動がありました。
さぁ皆さんも「モナドの悟り」に向けて楽しんでいきましょう。
モナドとは
モナドとは,関数型言語で,参照透明性を保持しながら手続き型的な記述をするための枠組みです。主に「演算をつなぎ合わせる」配管工事のようなイメージです。特に,「遅延評価」を主体とした関数型言語であるHaskellで盛んに使われています。
こう言っては身も蓋もないのですが,本当に「モナド」を極めるには遅延評価が主体のHaskellをやるのが一番だと思います。
なぜなら
Scalaでは「モナド」をそこまで極める必要はない
からです。これは,私がいろんな記事や書籍を読んでみたり,実際にHaskellを触ってサンプルを作ってみたりしてたどり着いた結論です。ですから,最近出版されたScalaの書籍に「モナド」の記述はほとんどないのです。
ただし,この「モナド」の考えを理解していればより「Cool」なプログラムができますし,他の人のソースもより読みやすくなることでしょう。
そのあたりの理由を最初にお話ししましょう。