関数型プログラミングとは、プログラムを関数の組み合わせとして考え、状態変更を避けることを中心としたプログラミングの手法です。主に数学的な関数を基盤としており、副作用のない関数を組み合わせて、処理を記述することが特徴です。
関数型プログラミングにおいては、プログラム全体を状態の変更ができない関数の組み合わせとして表現します。このため、同じ入力に対して常に同じ結果を返す「純粋関数」が重要な役割を果たします。また、可変の状態を持たないことで、プログラムのデバッグやテスト、並列処理が容易になるという利点もあります。
そのため、関数型プログラミングでは、再帰的な関数の利用や高階関数(関数を引数や戻り値として扱う関数)の活用が盛んです。また、リストや配列などのデータ構造に対して、map, filter, reduceなどの高階関数を利用して、繰り返し処理を行います。
代表的な関数型プログラミング言語としては、Haskell、Scala、Clojureなどがあります。また、JavaScriptやPythonなどの汎用プログラミング言語でも、関数型プログラミングのアプローチを取り入れたライブラリやフレームワークが存在しています。
Javascriptの例
配列の要素を2倍にする関数
function doubleArray(arr) {
return arr.map(function(x) {
return x * 2;
});
}
var array = [1, 2, 3, 4, 5];
var doubled = doubleArray(array);
console.log(doubled); // [2, 4, 6, 8, 10]
このコードでは、doubleArray
という関数を定義し、配列を引数として受け取り、map
メソッドを使って配列の各要素を2倍にしています。そして、doubled
という変数に2倍にした配列を代入しています。
また、JavaScriptではクロージャを利用して、関数の内部で別の関数を定義することができます。
function add(n) {
function addN(x) {
return n + x;
}
return addN;
}
var addTwo = add(2);
console.log(addTwo(3)); // 5
console.log(addTwo(5)); // 7
var addFive = add(5);
console.log(addFive(3)); // 8
console.log(addFive(5)); // 10
例では、add
という関数を定義して、内部で別の関数addN
を定義し、それを返しています。これによって、add
関数を呼び出すたびに、新しいaddN
関数が生成されます。
コメント