関数型プログラミングについて

javascript

概要

javascriptは関数をオブジェクトのように扱えるので、関数型プログラミングの書き方ができます。

サンプル(reduce)

関数型プログラムの例として、配列をreduce()メソッドを用いて処理してみます。

まず、reduce()のサンプル

let arr = [1, 2, 3, 5];

let calc_arr = arr.reduce(function (x, y) {
	return x + y;
});

console.log(calc_arr);

出力結果は「11」になります。

ものすごい単純な例ですが、reduceメソッドは関数型プログラミングの動作をしていると言えます。

reduceは、元となる配列arrの1つめの要素を引数と渡して処理した後で、演算後にreturnされた値を、2つめ以降の関数の引数として用いることができます。(配列の要素が無くなるまで演算されます)

こうすることで、上記の例では配列の各要素が順に加算された演算結果「11」となります。

サンプル(map)

次に関数型プログラムの例として、配列をmap()メソッドを用いて処理してみます。

上記のreduce()のサンプルを少し変えて、次のように書いてみました。


//mapサンプル
let arr2 = [1, 2, 3, 5];

let calc_arr2 = arr.map(function (x) {
	return x + 10;
});

console.log(calc_arr2);

出力結果は

Array(4) [ 11, 12, 13, 15 ]

という結果になります。

map()は、配列の各要素に対し、map()内部で宣言された無名関数の演算結果を、関数の戻り先の配列に対して、各要素の値を演算した結果を返して生成しています。
ただ、map()引数の指定の仕方によっては、元の配列要素の値を変更することが可能です。

それぞれの違い

map()は、reduce()と違い、要素数が複数になります。

map()は配列の全要素に対して演算を行い、演算結果も配列の要素数が生成されることに対して、
reduce()は配列の各要素に対して、演算した結果をさらに無名関数内部で演算をするため、処理結果が単一となります。

for等のループ文を使うより、シンプルな書き方ができるので、実用面で有効な書き方と言えそうです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です