「高階関数(こうかいかんすう)」を新人エンジニア向けに解説
こんにちは。ゆうせいです。
今回は 「高階関数(higher-order function)」 について解説します。プログラミングを始めたばかりの人にとっては、少し難しく感じるかもしれません。でも、実はとても便利な仕組みなんです!
高階関数を理解すると、コードをもっと 簡潔に書ける ようになったり、再利用性が高まる ので、ぜひマスターしましょう。
高階関数とは?
まず、「関数」についておさらいしましょう。関数とは 「ある入力を受け取り、処理をして、結果を返すもの」 でしたね。
では、高階関数とは何でしょうか?簡単にいうと、
「関数を引数に取る関数、または関数を返す関数」
のことを指します。
具体的な例
例えば、JavaScript で以下のような関数を考えます。
function twice(f, x) {
return f(f(x));
}
この twice
という関数は、 「関数 f
を x
に 2 回適用する」 というものです。
たとえば f(x) = x + 1
という関数を渡してみると、
function plusOne(n) {
return n + 1;
}
console.log(twice(plusOne, 3)); // 5
となります。
このように、関数を 「データのように扱う」 のが高階関数の基本的な考え方です。
なぜ高階関数が必要なのか?
高階関数を使うメリットを紹介します。
1. コードの再利用性が向上
たとえば、配列の要素に何か処理を加えたいとき、ループを使って毎回処理を書くのは面倒です。
let numbers = [1, 2, 3, 4, 5];
let squaredNumbers = [];
for (let i = 0; i < numbers.length; i++) {
squaredNumbers.push(numbers[i] * numbers[i]);
}
console.log(squaredNumbers); // [1, 4, 9, 16, 25]
この処理を高階関数を使って書くと、簡潔になります。
let numbers = [1, 2, 3, 4, 5];
let squaredNumbers = numbers.map(x => x * x);
console.log(squaredNumbers); // [1, 4, 9, 16, 25]
この .map()
という関数は 「配列の各要素に関数を適用する」 という高階関数です。ループを書かなくても、処理が適用できます。
2. 柔軟なプログラムが書ける
高階関数を使うと、処理をパラメータとして渡せるので、汎用性が高くなります。
例えば、「偶数だけを取り出す」「3 の倍数だけを取り出す」といった処理を考えてみましょう。
通常のループを使うと、処理ごとに新しい関数を書かないといけませんが、 filter()
という高階関数を使えば、同じ形で簡単に書けます。
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let evens = numbers.filter(x => x % 2 === 0);
console.log(evens); // [2, 4, 6, 8, 10]
let multiplesOfThree = numbers.filter(x => x % 3 === 0);
console.log(multiplesOfThree); // [3, 6, 9]
この .filter()
という関数は、「条件を満たすものだけを取り出す」 という高階関数です。 x => x % 2 === 0
や x => x % 3 === 0
のような関数を渡すだけで、簡単にフィルタリングができます。
代表的な高階関数
言語によって異なりますが、よく使われる高階関数を紹介します。
高階関数 | 説明 | 例 |
---|---|---|
map | 各要素に関数を適用して新しい配列を作る | array.map(x => x * 2) |
filter | 条件を満たす要素だけを抽出する | array.filter(x => x > 10) |
reduce | 配列の要素を累積的に処理する | array.reduce((sum, x) => sum + x, 0) |
sort | 条件を指定して並べ替える | array.sort((a, b) => a - b) |
forEach | 各要素に対して処理を行う(戻り値なし) | array.forEach(x => console.log(x)) |
まとめ
高階関数とは、 「関数を引数に取る、または関数を返す関数」 のことでしたね。
メリットとしては、
- コードが簡潔になる
- 再利用性が高まる
- 柔軟なプログラムが書ける といった点がありました。
最初は少し難しく感じるかもしれませんが、 map()
や filter()
を使いこなすだけでも、コードの書き方が大きく変わります。いろいろ試してみましょう!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
新入社員2025年2月18日新人エンジニアの不安を解消!ブレインダンプの活用法
新入社員2025年2月15日新人エンジニアからの質問 ターミナルやコマンドラインでディレクトリを開く方法は?
新入社員2025年2月15日新人エンジニアからの質問 ターミナルの画面をクリアする方法は?
新入社員2025年2月15日新人エンジニアからの質問 Bashなどのターミナルで途中キャンセルする方法は?