2008年1月21日月曜日

関数型プログラミングのエッセンス

自分用のメモ。
自分の使用する言語に概念を導入する。

参照透過性:これ大事。副作用をできるだけ減らす。再代入による状態遷移を防ぐ。


関数はファーストクラスオブジェクトである。
関数とは:ある入力に対してある出力があること。
入力のバリデートと出力のインターフェイスの統一性が大切

関数はファーストクラスであるが故に、
高階関数:関数自体を引数にしたり戻り値にしたりできる。

関数を引数にとる関数:
例:mapやfilter等=>ループの抽象化。ループ制御自体に記述するのでなくそこは抽象化してループの中でデータを処理するロジックの記述自体に注力できる
そのほか、関数を引数うに取るとは処理を引数にとることなので、外部化された処理、その処理に隠蔽化されたデータを今の関数の処理にプラスすることができる。(横への広がり)

関数を戻り値とする関数:
クロージャ:その関数内のローカルデータへの参照を含んだまま関数オブジェクトがいき続ける。
オブジェクトの概念に近似。
(縦への広がり)

カリー化:私にとってはクロージャと一体。複数引数を取る関数を引数一個を取る関数に分解する。
関数を一引数の関数とその処理に分解することは、ひとつひとつの関数のシンプル化に寄与し、デバッグもしやすくなる。

関数はなるべく一個一個をシンプルに。引数は一つ。処理が長すぎる場合は複数の関数に分解する。
横や縦に広げること。

続く

0 件のコメント: