【こうかいかんすう】

高階関数 とは?

💡 関数を「部品」として受け取る工場長のような関数
📌 このページのポイント
高階関数のしくみ パターン1: 関数を引数として受け取る 関数 f(x) x * 2 map( [1,2,3], f ) 高階関数 [2, 4, 6] パターン2: 関数を戻り値として返す multiplier(3) 高階関数 返す triple(x) x * 3 を返す関数 triple(5)→15 代表例: map, filter, reduce, sort(比較関数), addEventListener
高階関数:関数を引数に取る・関数を返すパターン
ひよこ ひよこ

関数に関数を渡すってどういうこと?

ペンギン先生 ペンギン先生

たとえば [1,2,3].map(x => x * 2) では、map に「各要素を2倍する関数」を渡している。mapは「配列の各要素に対してもらった関数を適用する」という汎用的な処理。渡す関数を変えれば3倍にも文字列変換にもできる。

ひよこ ひよこ

map, filter, reduce の違いは?

ペンギン先生 ペンギン先生

map は各要素を変換して新しい配列を返す。filter は条件に合う要素だけを残した配列を返す。reduce は全要素を1つの値にまとめる(合計値を出すなど)。この3つを使いこなすとforループが激減する。

ひよこ ひよこ

高階関数を使うメリットって何?

ペンギン先生 ペンギン先生

処理のパターンを抽象化できること。「配列を走査して何かする」というパターンをmap/filter/reduceに任せ、「何をするか」だけを渡せば済む。コードが短く宣言的になり、意図が伝わりやすくなる。

ひよこ ひよこ

高階関数って関数型プログラミングだけのもの?

ペンギン先生 ペンギン先生

いいえ、JavaScriptPythonJavaなど主流の言語ほぼすべてで使えるよ。関数型プログラミングの概念だけど、今や「普通のプログラミング手法」として広く浸透しているんだ。コールバック関数も高階関数の一種で、addEventListener('click', callback) のcallbackを渡す仕組みも高階関数だよ。

ひよこ ひよこ

高階関数を使いこなすコツって何かある?

ペンギン先生 ペンギン先生

まずは「小さな関数を組み合わせて大きな処理を作る」という発想に慣れることだね。例えば「偶数だけ取り出して2倍にして合計する」を numbers.filter(n => n % 2 === 0).map(n => n * 2).reduce((a, b) => a + b, 0) と書けるようになると、forループネストが激減する。関数合成(compose)やカリー化も覚えると表現力がさらに広がるよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
高階関数って出てきたら「関数を受け取ったり返したりする関数」と思えばだいたいOK!
📖 おまけ:英語の意味
「higher-order function」 = 高次の関数
💬 数学の「高階」と同じで、関数そのものを操作対象にする一段上の抽象レベルの関数
← 用語集にもどる