読み方 : かんすうがたプログラミング

関数型プログラミング【functional programming】

概要

関数型プログラミングとは、コンピュータプログラムを、関数の定義と関数の適用の組み合わせとして記述していくプログラミングのスタイル。データの変更や状態の管理を極力避ける。
関数型プログラミングのイメージ画像

中核となる概念の一つが「純粋関数」(pure function)で、同じ引数を与えれば必ず同じ値を返し、関数の外部にある変数を読み書きしない関数を指す。副作用(関数外への影響)がないため、テストが容易で並列実行しても結果が変わらない。もう一つの核心が「不変性」(immutability)で、一度作成したデータを書き換えず、変更が必要な場合は新しいデータを生成する。これにより、プログラム実行中のある時点での状態を追跡しやすくなる。

高階関数」(higher-order function)も関数型プログラミングの基本要素であり、関数を引数として受け取ったり、関数を戻り値として返したりできる関数を指す。「参照透過性」(referential transparency )も頻出する概念で、式をその評価結果に置き換えてもプログラムの動作が変わらない性質を指す。これが保たれていると、コードの断片を切り出して個別に検証したり、コンパイラが最適化を適用したりしやすくなる。

関数型言語

関数型プログラミングを基本的なコード記述スタイルとするプログラミング言語を「関数型言語」という。「Lisp」や「Scheme」「Erlang」「F#」などがよく知られている。副作用を一切排し、数学的な関数のみでコードを構成する仕様の言語を特に「純粋関数型言語」と呼び、「Haskell」や「Elm」「Lean」などが該当する。

現代では、JavaScriptPythonなど手続き型オブジェクト指向型などを中心的なスタイルとする言語にも関数型プログラミング的な仕様が取り込まれている。例えば、配列やリストの操作では「map」や「filter」、「reduce」などの関数を用いて要素ごとの処理や集約を行うことができ、コードを宣言的に書くことができる。

また、高階関数の仕組みにより関数を一定の条件下で値として扱えるため、イベントハンドラコールバック関数に動的に渡したり、処理の組み合わせを柔軟に構築したりできる。例えば、汎用のソート関数に開発者が自作した比較関数を渡し、その結果に基づいて配列ソートするといったコードをシンプルに記述することができる。副作用が少ない設計はテストやデバッグの際にも入力と出力の関係を明確に確認しやすい。

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。