関数型プログラミングを追う日々
最近、関数型プログラミングの基礎知識を学ぶことに時間を割いています。
きっかけは、「関数型プログラミングの基礎 JavaScriptを使って学ぶ」という本でした。
Haskellに寄り道
「関数型プログラミングの基礎」を読んでいると、ちょいちょい「Haskell」の話が出てきます。
以前、話題になってたのでHaskellの本を読んでみましたが、そのときはあまりよく分かりませんでした。(使う場面もなかったですw)
改めて、「Haskellって何だったんだろう?」と思って読み返してみると、「なるほど、そういうことだったのか~」と新たな気付きが得られました。
自分のスキル不足のため、Haskellで実用的なアプリを作る機会はないだろうけど、それでもHaskellは良くできたパズルみたいなかんじで、ちょっとしたコードを書いて練習してみるだけでも楽しめます。
Haskellの学習を通じて、関数型プログラミングの作法を知り、JavaScriptのプログラミングにも利用してみたいです。
一般的には、手続き型プログラミングがコマンド実行の列としてプログラムを記述していくのに対し、関数型プログラミングは複数の式を関数の適用によって組み合わせていくプログラミングスタイルである
手続型 → 関数型
- 順次 → 関数の合成
- 反復 → 再帰
- 分岐 → パターンマッチ
Haskellの攻略本
Haskellの教材は、本やWebの記事などいろいろあります。
Haskellの基本を知るために役立ちそうな本をピックアップしてみます。
- 作者: Bruce A. Tate,まつもとゆきひろ,田和勝
- 出版社/メーカー: オーム社
- 発売日: 2011/07/23
- メディア: 単行本(ソフトカバー)
- 購入: 9人 クリック: 230回
- この商品を含むブログ (64件) を見る
「7つの言語 7つの世界」は、 Ruby、Io、Prolog、Scala、Erlang、Clojure、Haskellをつまみ食いで紹介しています。
各言語の説明はボリュームが少ない分、理解するために最低限必要な内容に厳選しているかんじです。
Haskellの特徴もコンパクトに記述されているので、ウォーミングアップのつもりで、パラパラと眺めてみると良いでしょうか?
(時間があれば、他の言語の説明も読んでみたら大変参考になると思います。)
Ioとは 【7つの言語 7つの世界】 - JavaScript勉強会
- 作者: Miran Lipovača,田中英行,村主崇行
- 出版社/メーカー: オーム社
- 発売日: 2012/05/23
- メディア: 単行本(ソフトカバー)
- 購入: 25人 クリック: 580回
- この商品を含むブログ (73件) を見る
「すごいHaskellたのしく学ぼう!」は、Haskellの定番の教科書みたいです。(通称:すごいH本)
サンプルコードを動かしながら読めば、とりあえず内容は理解できます。
1冊だけで済ませたいなら、すごいHaskellを何度も読めばOKだと思います。
(参考)Haskellで生産性を高める-Pythonからの移行 | プログラミング | POSTD
→すごいHaskellの第7章「型や型クラスを自分で作ろう」までで一区切り。I/O(副作用)を気にしなくても良いちょっとしたコード書いて遊んでみる。
第8章「入出力」以降で、「モナド」というパターンを学び、副作用を扱う方法を学ぶ。
[増補改訂]関数プログラミング実践入門 ──簡潔で、正しいコードを書くために (WEB+DB PRESS plus)
- 作者: 大川徳之
- 出版社/メーカー: 技術評論社
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
「[増補改訂]関数プログラミング実践入門」は、要点をまとめた本です。
雰囲気が受験参考書みたいで、「すごいHaskellたのしく学ぼう!」を読んだ後に読めば、知識を体系的に整理するのに役立ちそうだなー、と思いました。
JavaScriptで関数型プログラミング
(Haskellに寄り道して順番が逆になってしまいましたが)JavaScriptでも関数型プログラミングを実践することができます。
「関数型プログラミングの基礎 JavaScriptを使って学ぶ」は、JavaScriptの入門書ではありません。(JavaScriptの基本を学ぶ目的なら、他に良い本がたくさんあります。)
この本は、サンプルコードがJavaScriptで書かれてますが、関数型プログラミングの考え方を説明することが主眼になってます。
「へー、こんなやり方もあるんだ!」と、パズルを解く感覚で読めば、結構楽しめます。
関数型プログラミングについて丁寧に説明してあるので、本書を読んでから「すごいHaskell」を読めば、Haskellが分かりやすく感じられるというメリットもありましたw
「JavaScript関数型プログラミング 複雑性を抑える発想と実践法を学ぶ」は、関数型プログラミングの説明というよりも、実際に関数型ライブラリーを使って、JavaScriptで関数型プログラミングを実践する具体的な方法を紹介しています。
関数型プログラミングの作法をある程度知っている人が読めば、JavaScriptで関数型プログラミングを習得するのに役立つと思います。知らないと「何言ってるかよく分からない」で終わってしまう可能性もあります。
なので、本書は「関数型プログラミングの基礎 JavaScriptを使って学ぶ」の続編みたいな位置付けで読んでみます。
- 先に、「関数型プログラミングの基礎 JavaScriptを使って学ぶ」を読む。
- 次に、「JavaScript関数型プログラミング」を読む。
という順番で行ってみます。
JSの関数型の本も、1度読んだだけでは十分に理解できないので、何度も読んでみようと思います。
JavaScriptは「関数」が重要
…と、まあ、こんな具合に脱線して、「関数型プログラミング」の練習に時間を割いてましたが、本来のJavaScript学習にも復帰しつつあります。
今日は、「JavaScript Ninjaの極意」という本を読んでみました。
JavaScript Ninjaの極意 ライブラリ開発のための知識とコーディング (Programmer's SELECTION)
- 作者: ジョン・レシグ,John Resig,ベア・ビボー,Bear Bibeault,勝亦勇,吉川邦夫
- 出版社/メーカー: 翔泳社
- 発売日: 2013/05/25
- メディア: 大型本
- この商品を含むブログ (9件) を見る
本書は、jQueryの作者、ジョン・レシグ氏が解説している本です。
JavaScriptを使いこなすには、JavaScriptの「関数」が重要とのこと。
関数型プログラミングを前面に出してはいませんが、ちょいちょい関数型プログラミングの考え方が出てきます。
関数型プログラミングの本を読んだ後に本書を読むと、JavaScriptの関数の特徴(ファーストオブジェクトなど)や、使い方の理解が深まると思いました。
まとめ
自分が知りたかったこと=どうやったら、JavaScriptをスムーズに習得できるか?を念頭に置いて、関数型プログラミングの本も参考にしてみたいと思います。
どういう順番で練習すれば良いか?検討し直してみよう★