smallgeek

Swing god gun, I need it low demon

Real-World Functional Programming を読んだ

Real-World Functional Programming: With Examples in F# and C#

Real-World Functional Programming: With Examples in F# and C#

概要

この本は F# enthusiast であらせられる Tomas Petricek 氏による、現実世界で直面するであろう数々の問題に関数プログラミングで立ち向かうための本である。出版は 2009年なので、F# の歴史の中では若干古い本ではあるが、本書のテクニックは現在でも有用だ。ちなみに、氏は [Client-side scripting using meta-programming] という卒論を 2007年に、 [Reacitve programming with events] という修論を 2010年に執筆している。ということは、この本は氏が修士のときに書かれた本なのだ。末恐ろしい修士がいたものだなぁ……。

面白かった点

氏は特に宣言的な記述を勧めている印象を受けた。宣言的に記述するために、型と関数を定義して組み合わせる。またその要素それぞれは、極めてシンプルなものだ。シンプルなものを組み合わせて複雑なものをわかりやすく作る。その哲学こそが関数プログラミングの根幹を成していると感じた。 サンプルコードでは代数的データ型がふんだんに使われていた。F# を含め代数的データ型をサポートしている言語を使うときは、代数的データ型を多用していきたい。代数的データ型とパターンマッチは強力な武器だ。 また、状態モナドに頼らずに状態を保持する方法も実用的で F# らしいと感じた。Haskell way がいつだって正しいわけじゃない。

仕事で使えるところ

本書は F# だけでなく、C#関数プログラミングを習得するための本でもある。特に注目すべきは、クエリ式をモナドの構文として使用しているところだ。Option のようにモナドな型を作ったらクエリ式での宣言もサポートすべく、Select と SelectMany を追加するといい。