コールバック関数と高階関数の違い(Python/JavaScript)

目次

コールバック関数と高階関数の違い

セットで使われる概念です。指しているものが受け取る側か、渡される側かで異なります。

コールバック関数 他の関数に渡されて、その中で呼び出される関数のこと
高階関数 関数を引数として受け取る、または関数を返す関数のこと

Pythonの場合

def test1(x, y):  # yに関数を受け取る → 高階関数
    z = y(2, 3)
    return x + str(z)

print(test1("ABC ", lambda a, b: a * b))  # ABC 6
#                    ↑ これがコールバック関数

1行目の
yは、関数を受け取る引数です。→高階関数です。

5行目の
test1の2つめの引数は関数です。→コールバック関数です(関数名がないので無名関数)。

JavaScriptの場合

<script>// 関数 y を引数に受け取る高階関数
    const test1 = (x, y) => {
        const z = y(2, 3);
        return x + String(z);
    };

    // 実行例:第二引数にアロー関数を渡す
    console.log(test1("ABC ", (a, b) => a * b)); // 出力: ABC 6
</script>

2行目の
yは、関数を受け取る引数です。→高階関数です。

8行目の
test1の2つめの引数は関数です。→コールバック関数です(関数名がないので無名関数)。

コールバック関数は、無名関数である必要は無し

コールバック関数は無名関数でなくても構いません。
通常の関数を定義して渡すこともできます。

無名関数(特にアロー関数)が多用されるのは、以下の理由からです。

定義と使用が一度に済む:いちいち別の場所に関数を定義しなくていいため、コードの意図がその場ですぐに伝わります。

変数名の節約:1回しか使わない処理にわざわざ名前を付ける手間(命名の悩み)が省けます。

コールバック関数の種類

通常の関数 処理が複雑、複数箇所で再利用したい
無名関数 処理が単純、その場限りで使い捨て

関連の記事

ミュータブルとイミュータブルの違い

△上に戻る