概要
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等のループ文を使うより、シンプルな書き方ができるので、実用面で有効な書き方と言えそうです。