オブジェクト指向と関数型プログラミングの違い
- データと振る舞いをどう扱うか
- 副作用があるか
関数型にするには
- データと振る舞いを分離させる
- 外部に依存しないよう関数の入出力を定める
- 再帰やイテレーションメソッドを使い、副作用を取り除く
http://qiita.com/stkdev/items/5c021d4e5d54d56b927c
同じ関数であれば、いつ実行しても結果が同じであること。
引数が同じなら戻り値は、必ず同じであるということです
global変数の使用などによる状態の変化がないこと
ファイルのI/Oやデータベースも状態の変化に含まれてしまいますが、そこは局所化してなるべく切り分けましょう
- 状態(変数)と振る舞いを切り離す
- ループではなくmapやreduceを使う
- 振る舞いを副作用のない関数にバラす
http://pg-kura.hatenablog.com/entry/20111114/1321236695
以下の様な兆候を感じたら、あなたはそのプログラムを関数型プログラミングで書くべきです。
"人工物"クラスが増えてきた。
Builderパターン、Strategyパターン、Commandパターン、Interpreterパターンが増えてきた。
DI注入のとき、コンストラクタ注入にするか、セッター注入にするか、いつも迷う。