関数型プログラミングを学んで学んだこと
関数型プログラミングをしたい,と思ったのはどうしてだったか.
「テスタブルなコードを書きたい,ていうかテスト書きたい」というのが発端だったと思う.
1年ほど前だ.
テスト書くのは当たり前だろと言われるだろうけど,テストは書かないという会社に今勤めている.でも内緒で少しテストを書いている.見つかったら処分されるかな?
(テスト文化のある会社に転職したいと本気で思ってる.)
「テスタブルなコード」っていうのは,関数型プログラミングをすればできると思っていたんだ.
それは事実かもしれないけど,しかし関数型プログラミングが難しかった.
結局何が関数型プログラミングなのかわからない始末だ.
学習方法としては無難に書籍を漁った.書籍に一言ずつコメントを添えていく.
書籍別コメント
関数型プログラミングに目覚めた! IQ145の女子高校生の先輩から受けた特訓5日間
哲学の話が多いのが難.それでも関数型プログラミングの導入にはなった.JavaScriptで学ぶ関数型プログラミング
underscore.jsを使っての関数型プログラミング.実践的でよかった.この本が一番よかった.実は現在3回目の学習に入っている.ちなみにunderscore.js/lodash.jsが無くても標準のJSで十分カバーできる. 参考文献: Lodash/Underscoreは必要ない(かも)Javaによる関数型プログラミング ―Java 8ラムダ式とStream
いかんせんJavaでは中途半端な関数型プログラミングになる.使いづらいし.すごいHaskellたのしく学ぼう!
関数型プログラミングではなくて関数プログラミング言語に手をだしてしまった.だけどすごく勉強になった.ただし途中で挫折.関数型プログラミングの基礎 JavaScriptを使って学ぶ
読んだ本の中で最悪だった.JavaScriptでHaskellを実装する感じ.なんの意味が?
「すごいHaskell本」以外の本はそれぞれが独自路線だった.結局関数型プログラミングってなんなのかがわからなくなった.
関数型プログラミングを学んで学んだこと
- map, reduce, filter
- 変数はイミュータブルにすること
- 参照透過性を保つこと
- 副作用のない関数にすること
僕がしたかった「テスタブルなコード」には少し近づけたと思う.
知りたいこと
- テストどうやる?
- 副作用のある処理
- データベースアクセスする処理
追記: 個人的な結論
- 関数型プログラミングをしつつもオブジェクト指向と仲良くする
- 汗水涙垂らして関数型プログラミングしない(命令型プログラミングしてもいい)
- でもできるだけ関数型指向に寄り添いテスタブルにする