TL;DR

数学的な意味での関数を主に使うプログラミングのスタイル。このスタイルを推奨する言語を、関数型プログラミング言語と呼ぶ。

なぜ必要か

Wikipedia によると、状態を持たない関数は並列処理に向いている。式が型を持つので、型付けが細部まで及ぶと堅固なプログラムになる。

仕組み

手続き型言語が文を並べて処理を書くのに対し、関数型言語では式を組み合わせてプログラムを作り、プログラム全体も 1 つの式とみなせる。同じ引数を与えれば必ず同じ結果を返す性質を参照透過性と呼び、すべての関数が参照透過性を持つ言語を純粋であるという。多くの関数型言語はラムダ計算を基礎にしている。

例

Haskell、Elm、Erlang、F#、OCaml、Scala、Lean、Clojure などの Lisp 系の言語がある。

注意点

純粋な関数だけでは、ファイル操作のような外界とのやり取りを直接は書けない。I/O を起こす関数を用意する(F#)、I/O を型で表す(Haskell の IO 型)など、言語ごとに対処のしかたが違う。

関連

出典