『オブジェクト指向プログラマが次に読む本 Scalaで学ぶ関数脳入門』読了。
「オブジェクト指向プログラマが次に読む本」ってけっこう露骨に煽り文句っぽいと思ったけど^^;、でもホントJavaプログラマーが読むにはいいかも。
関数型プログラミングの基礎として「副作用」についての説明とかちゃんとあるし、「funarg問題」なんて知らなかったなー。他にも高階関数とかクロージャとか共変アノテーションとか、色々な用語も説明されている。
実際、Javaでもなるべく副作用の無いメソッドを作る方がいい(JUnitでテストしやすいし)と思っているが、新人に「副作用の無いようにプログラムを書け」と言っても“副作用”の説明からしなきゃいけないので大変なんだよね。
「C++で関数宣言の後ろに付いているconstはどういう意味?」っていうのを調べたことがあれば副作用という言葉が出てこないはずが無いんだけど、新人にそんなの望むべくもないし(爆)
(そういう意味ではDBアクセスを行うと必ず副作用が発生するんだが、そこを解説したScalaの本ってあるのかなぁ?)
他には再帰やパターンマッチの説明でそれぞれ章が立てられている。
再帰呼び出し自体は知ってるけど、Javaでは使ったことないなぁ。そこら辺がすんなり頭に入ると関数脳になるんだろうな(笑)
Scala以外の関数型言語を勉強したことが無いので、パターンマッチがそんなに関数型言語にとって重要だとは知らなかったけど、実際これすごく強力・便利そう。
別の章に言語処理の例(yaccとlexのような構文解析をScalaのパーサコンビネーターライブラリーを用いて作ってみる)が出てくるんだけど、パターンマッチのせいで無茶苦茶すっきりしてるし!
(パーサコンビネーターがあれば、自分がJavaで作った解釈クラスなんて全く不要^^;)
あと、並行プログラミングとして通常のスレッドの使い方・ロックの方法から始まってアクターの説明に進んでいるのも良かった。
アクターのサンプルとして、MapReduceのアルゴリズムを独自実装する例が出てきたのには驚いたけど(笑) (もっとも、HadoopのMapReduceとは引数の渡し方が違う(ような気がした)のとアクターの使い方に慣れていないのとがあって、あまり理解できなかったのだけれど。アクターは重要そうなだけに、まだまだ精進が必要だ…)
まれに誤字を見つけたけど、まぁよくある範囲か。(ピリオドをコロンと書いてある(p.91)のはさすがにどうかと思うが^^;)
さて、次はコップ本に挑戦してみたい。が、原著(英語)で第2版が出たらしいので、その日本語訳が出るまで待ちかなー。