『JavaScriptで学ぶ関数型プログラミング』の感想

はいどーも関数型ニートです。
本日は『JavaScriptで学ぶ関数型プログラミング』の感想記事を書きたいと思います。

Haskellがわからなかった

僕は以前にも関数型関連の本を読んだことがあります(すごいH本)。
が、ぶっちゃけわからない部分が多かったので、慣れている言語であるJavaScriptで学んでみようかなと思ったのが今回この本の購入に踏み切った感じです。

環境の準備は簡単

「関数型のライブラリ色々入れないと行けないんだろぉ!?」と思っていたのですが、実際にはUnderscoreというライブラリだけでOKのようです。
僕はLodashで代用しましたが、Underscoreとは若干使い方が違う関数もあるので、違いを自分で調べるのが面倒だという場合はそのままUnderscoreでいいと思います。
ただ「以前作った関数」を当たり前のように使用するので、ページをあっち行ったりこっち行ったりするのはご愛嬌。
ちなみにRxJsとか他のライブラリについてはチラッとだけ触れられています。

内容が若干古い

初版は2014年1月21日に出されたことになっています。
原著は2013年6月20日に出されたことになっています。
当たり前ですがいわゆるES2015については書かれていません(「次のバージョンでこんな構文が予定されています」みたいなのはありいますが)。
また、bindやletについても「こんなのが出る予定です」という体で書かれているため、訳注で軽く触れられている程度です。

難しい用語は出てこない

関数型と言えば「モナド」やら「ファンクター」やら聞き慣れない用語が多く出てくると思うのですが、本書は「モナド」という言葉は(多分)一回しか出てきません。
モナドの代わりに他の言葉を使って説明し、「これはモナドとも呼びます」という形で説明してくれているのでわかりやすいかなと思いました。
ただわかっている人からすれば「これモナドのことだろ? なんでこんな回りくどい説明しているんだ?」と思うかもしれません(僕はわからない側の人間だったのでよかったですがw)。

関数型とは

本書の最初の方でズバリ関数型とは「値を抽象の単位に変換する関数を使用して行うプログラミングであり、それらを使ってソフトウェアシステムを構築すること」としています。
本書では上記のことを徹底して実践・解説しています。
またオブジェクト指向との違いについても触れられています。
「あるインスタンスに対して直接メソッドを呼び出すこと」はオブジェクト指向のスタイルですが、関数型のスタイルでは「実行ターゲットとなるオブジェクトを引数に取る関数」を好むと書いています。
関数型でもポリモーフィズムは可能であるということを実例を持って書いてくれているので、JavaScriptの関数型について知りたい方には結構いいんじゃないかなあと思いました。

命令形スタイルを完全否定しているわけではない

本書は関数型を勧める本ではありますが、命令形のスタイルやオブジェクト指向を否定しているわけではないです。
実際、「関数型スタイルのコードは理想的である場合も多いですが、使用するライブラリの特性や、実行速度や他の便宜上、命令形スタイルで実装を行うべき場合もあります」と書いています。
実際ツクールMVだと、すでにオブジェクト指向スタイルで多くのコードが書かれているため、完全な関数型スタイルに変更するのは難しいでしょう。

再帰処理についても触れられている

関数型と言えば再帰もわりと関係があると思うのですが、本書も再帰について1章まるまる割いています。
ただしJavaScriptは普通のループもあります。
本書も「再帰は低レイヤーでの操作であり、可能な場合は避けたほうがよいということです」と書いています。
「よりよい方法は、利用できる高階関数を調べて、それらを組み合わせて新しい関数を生成することです」とも言っています。
特に再帰はスタックオーバーフローを起こすことがあるので、なるべく避けたほうがよいのかもしれませんね(ただスタックオーバーフローの避け方について書かれているのと、そのうちJavaScirptでも末尾再帰最適化されるんじゃないかなー的なことについては触れられています(現在も末尾再帰最適化はほとんどの環境でされていないようです)。

オブジェクト指向しか知らないなら買う価値があるかも

僕は普段からオブジェクト指向でプログラミングをおこなっているので、関数型でプログラムを作るには思考方法の転換が必要でした。
実際、まだまだオブジェクト指向の考えは抜けていないのですが、部分的に関数型の考え方を取り入れるのは大いにありだなあと思いました。
クラス階層以外で物事を考えていくのは面白くもあり、難しくもありますね……。
まあまだ関数型について勉強を始めて1~2ヶ月なので、そりゃ使いこなせるほうがおかしいっちゅー話ではありますが。

終わりに

Haskellの入門書は難しかったのですが、今回の本は「なんとか理解できないことはない」というレベルでよかったです。
関数型についてはまだまだわからないところがあるので引き続き勉強を続けたいと思いますよ。
ほなそんな感じで。

フォローする