だいくしー(@daiksy)のはてなブログ

daiksyの徒然的なもの 以前のブログはこっち -> http://daiksy.blogspot.jp/

『Scala関数型デザイン & プログラミング』で関数型プログラミングを学ぶぞ!

Scala関数型デザイン & プログラミング - Scalazコントリビュータによる関数型徹底ガイド』(タイトル長い)を読んでいる。まだ読み終わっていないが、現時点での感想としては「最高の本だ!」という感じ。

書名からはまったくうかがい知ることはできないが、こちらは『Functional Programming in Scala(以下FPinScala)』という書籍の日本語訳本である。

Functional Programming in Scala

Functional Programming in Scala

このFPinScalaは、かねてよりScalaコミュニティ内で非常に評価の高い本で、各地で読書会なども開かれている。 FPinScalaの内容については、まだMEAP版だった頃に書かれた吉田さんのエントリが詳しい。

d.hatena.ne.jp

実はぼくもこのエントリを読んでMEAP版を購入し、去年のScalaMatsuriでこんなLTをしていた。

www.slideshare.net

要するに英語苦手だけどGoogle翻訳とかいろいろ使えばそれなりに読めるよ、という内容で、この頃はわりと真面目に読んでいたのだけれど、結局途中で挫折した。 そんなぼくにとって、待望の翻訳版というわけなのである。

本書のテーマ

書影を見ると、大きく"Scala"と書かれているし、実際にコード例はScalaで記述されているが、前述の吉田さんのエントリにもあるとおり本書はScalaの言語そのものを学ぶには適していない。 本書のテーマは、Scalaを用いて関数型プログラミングを学ぼう、というものである。

Scala関数型言語オブジェクト指向言語のハイブリッドだ、とよく評される。しかし、Scala関数型言語としての側面を強調した書籍はこれまでになく、だいたい世の中のScala使いはコップ本でScalaの言語を学び、次にHaskellなどを学んで関数型プログラミングの深みに入っていく、という流れになっていたんじゃないかと思う。 ぼく自身も、Scalaをある程度身につけたあとで、"すごいH本"などを読んではじめて「Scalaのあの言語仕様には関数型言語としてこういう意味があったのか!!」と気づいたりしていた。

Scalaスケーラブルプログラミング第2版

Scalaスケーラブルプログラミング第2版

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

ちなみに、「Scalaで学ぶ関数脳入門」という本があって、Scala関数型プログラミングを学ぶための本のような気配があるが、これはどちらかというとJavaプログラマScalaを学ぶための本、という感じで、あまり関数型プログラミングが強調されている本ではない。

オブジェクト指向プログラマが次に読む本 ?Scalaで学ぶ関数脳入門

オブジェクト指向プログラマが次に読む本 ?Scalaで学ぶ関数脳入門

"FPinScala"が日本語で手軽に読めるようになったことで、Scalaを学んでいる人がその延長として関数型プログラミングを学びやすくなったのではないかな、と思う。

そういうわけで、本書の対象読者は、「Scalaをある程度学んだので、その流れで関数型プログラミングをさらに学んでいきたい人」といった感じになるだろうか。

本書の読み方

本書は、Scalaを使って関数型プログラミングを学ぶ本である。関数型プログラミングを学ぶには、とりあえず手を動かして実際のコードを書く、というのが一番の近道だとよく言われる。本書は、章の区切りなどに抱負な練習問題が用意されていて、これらの練習問題に取り組むことで実際に手を動かしながら学んでいくことができる。

練習問題のヒントや解答は書中には書かれていないが、これはGithubで公開されている。

github.com

ここには書中にあるサンプルコードなどもすべて入っているので、実際に動かしながらコードの内容を確認できたりもする。

本書は決して簡単な内容ではないが、こういったコード例を見ることで、じっくり関数型プログラミングを学ぶにはとてもよい環境が用意されているといえるだろう。

なにより、関数型プログラミングの基本的な考え方に対する実際の実装を、Scalaのコードで読める、というのが本当に素晴らしい......。