なっとく!関数型プログラミング

本日読了。

難解であるが、ScalaまたはRustに慣れていれば、読み進められそう。

  • 純粋関数の3つのルール。関数の戻り値は常に1つだけ、関数はその引数にのみ基づいて戻り値を計算する、関数は既存の値を変更しない。純粋関数=数学関数。
  • 関数型プログラミングとは、イミュータブルな値を操作する純粋関数を使うプログラミングである。
  • 純粋関数の引数として純粋関数を与える。sort_by_key。
  • 純粋関数の例として、mapやfilterやfoldやflatten。
  • 複数の引数の純粋関数を、1つずつの引数の純粋関数に分解する、カリー化。
  • 戻り値に複数の意味を与えないように、nullを回避するOption型を導入。
  • 引数の配置を間違えないようにするnewtypeパターン。
  • 構造体やクラスは直積型、列挙型は直和型、直積型と直和型をあわせもつものを代数型(ADT: Algebraic Data Type)とよぶ。ADTの処理はパターンマッチングで実装する。