関数型プログラミング
- 副作用:代入文、グローバル変数、APIの返答結果
- 俗世のプログラミング:繰り返し文でプログラムを制御し、代入文で好きなようにグローバル変数や配列の要素の値(プログ
ラムの状態)を変えて副作用を積極的に使う。
- ファーストクラスオブジェクト:関数も(1や"abc"のような)普通のオブジェクトとして扱える
- 関数をつなぎ合わせて書く。簡単で小さな副作用のない部品を組み合わせて書く。
- 高階関数(関数を引数にしたり戻り値にしたり)
- パターンマッチ:switch case文のように条件分岐してパタン結果を変数に束縛して処理できる。
# 関数型プログラミング向きの問題
- 状態を持たずに再帰的な構造をしている問題。
(例)探索や整列プログラミング、将棋プログラムの思考ルーチンで先読み
- 現実世界の再帰的な構造。大きい問題を同形の小さな問題に分解して考える数学的帰納法。
(例)年間計画 -> 期別計画 -> 月間計画 -> 週間計画。社長 -> 部長 -> 課長 -> 係長(この逆の方向で報告がおこなわれる)
- 並列処理が自然にできる
状態を持たず副作用がない関数型プログラミングでは並列処理が自然に行える。同期処理、排他処理も必要ない
- 動的なプログラミングが自然にできる
関数を引数にしたり戻り値にしたり、関数自体をデータとして扱えるので、動的に関数を生成したり変更することができる。
- 抽象的なプログラミングが自然にできる
上記の動的なプログラミングとも相関があり、仕様変更に強いプログラムを作ることができる。