ループと高階関数の違いとは
プログラミングでは「繰り返し処理」を書く方法として ループ構文(for, while など) と 高階関数(map, filter, forEach など) の2つがあります。どちらも「配列の要素を順番に処理する」ことができますが、書き方や考え方に違いがあります。
ループ構文の特徴
書き方の自由度が高い
for や while を使うと、繰り返しの開始条件・終了条件・更新方法を自由に書けます。
const numbers = [1, 2, 3, 4, 5];
let sum = 0;
for (let i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
console.log(sum); // 15
JavaScriptこの例では、インデックスを使って配列の要素を順番に足し合わせています。
可読性が下がることもある
自由度が高い分、処理が複雑になると「何をしているのか」が分かりにくくなることがあります。
高階関数の特徴
意図が分かりやすい
高階関数は「配列をどう処理するか」を直接表現できます。
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, n) => acc + n, 0);
console.log(sum); // 15
JavaScriptこの例では「reduce を使って合計を計算する」と意図が明確です。
コードが短くなる
ループよりもシンプルに書ける場合が多く、読みやすさが向上します。
ループと高階関数の比較
例題1:配列の要素を2倍にする
ループの場合
const numbers = [1, 2, 3];
const doubled = [];
for (let i = 0; i < numbers.length; i++) {
doubled.push(numbers[i] * 2);
}
console.log(doubled); // [2, 4, 6]
JavaScript高階関数の場合
const numbers = [1, 2, 3];
const doubled = numbers.map(n => n * 2);
console.log(doubled); // [2, 4, 6]
JavaScriptループは「どう繰り返すか」を細かく書く必要がありますが、高階関数は「何をしたいか」を直接書けます。
例題2:偶数だけを取り出す
ループの場合
const numbers = [1, 2, 3, 4, 5];
const evens = [];
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] % 2 === 0) {
evens.push(numbers[i]);
}
}
console.log(evens); // [2, 4]
JavaScript高階関数の場合
const numbers = [1, 2, 3, 4, 5];
const evens = numbers.filter(n => n % 2 === 0);
console.log(evens); // [2, 4]
JavaScript高階関数は「条件に合うものを残す」と直感的に書けます。
まとめ
- ループ は自由度が高く、細かい制御ができるが、コードが長くなりがち。
- 高階関数 は意図が分かりやすく、短く書けるが、複雑な制御には不向きな場合もある。
- 初心者は「ループで仕組みを理解し、高階関数でコードを簡潔に書く」という流れで学ぶと理解しやすい。
つまり、ループは「手作業で繰り返す」、高階関数は「処理を任せる」とイメージすると違いがつかみやすいです。

