高階関数とコールバック | 関数型プログラミングの基礎 | JavaScript 超完全入門 基本から発展までのすべて

現在作成中です。今後加筆修正してまいります。
スポンサーリンク
スポンサーリンク

高階関数とは?

高階関数(Higher-Order Function)とは、関数を引数として受け取ったり、関数を戻り値として返す関数のことです。JavaScriptでは、関数をオブジェクトとして扱うことができるため、高階関数を簡単に利用できます。

高階関数の特徴

高階関数には以下の特徴があります。

特徴 説明
関数を引数に取る 高階関数は他の関数を引数として受け取ることができ、動的な振る舞いを提供できる。
関数を返す 高階関数は、新しい関数を戻り値として返すことができ、柔軟な構造を作成できる。

高階関数の例

以下は、高階関数の具体例です。この関数は、他の関数を引数として受け取り、それを実行します。

function repeatAction(action, times) {
    for (let i = 0; i < times; i++) {
        action();
    }
}

function sayHello() {
    console.log('Hello!');
}

repeatAction(sayHello, 3);  // 出力: Hello! が3回表示される

この例では、repeatActionという高階関数が、引数として渡されたsayHello関数を3回実行しています。repeatAction関数は、別の関数を引数として受け取り、その関数を必要に応じて繰り返し実行しています。

コールバック関数とは?

コールバック関数(Callback Function)とは、他の関数に引数として渡され、その関数内で呼び出される関数です。非同期処理やイベント処理などでよく使用されます。JavaScriptでは、関数を引数に渡すことができるため、コールバック関数は非常に頻繁に使われます。

コールバック関数の例

次に、コールバック関数の例を示します。この例では、setTimeout関数を使用して、一定時間後にコールバック関数が実行されます。

function greet() {
    console.log('Hello, World!');
}

setTimeout(greet, 2000);  // 2秒後に "Hello, World!" が表示される

この例では、setTimeout関数がコールバック関数としてgreetを受け取り、2秒後にこの関数を実行します。コールバック関数は、指定された条件(ここでは2秒の待機時間)を満たしたときに実行される仕組みです。

高階関数とコールバック関数の組み合わせ

高階関数とコールバック関数を組み合わせることで、柔軟な処理を行うことが可能です。以下は、その組み合わせの例です。

function processArray(arr, callback) {
    const result = [];
    for (let i = 0; i < arr.length; i++) {
        result.push(callback(arr[i]));
    }
    return result;
}

function double(num) {
    return num * 2;
}

const numbers = [1, 2, 3, 4];
const doubledNumbers = processArray(numbers, double);

console.log(doubledNumbers);  // 出力: [2, 4, 6, 8]

この例では、processArrayという高階関数が、numbers配列とdoubleというコールバック関数を受け取り、各要素に対してコールバック関数を適用しています。結果として、配列内の各要素が2倍になった新しい配列が返されます。

高階関数の利点

高階関数を使うことで、以下のような利点があります。

利点 説明
コードの再利用性が高まる 同じ処理をさまざまな場所で使うことができる。
動的な挙動の実装が容易 関数を動的に受け渡し、実行時に処理を変更することができる。
柔軟なコード構造 関数の引数に関数を渡すことで、柔軟なコードを実現できる。

まとめ

高階関数とコールバック関数は、JavaScriptの関数型プログラミングにおける重要な概念です。高階関数は関数を引数として受け取り、または関数を返すことで柔軟な処理を提供します。コールバック関数は、特定の条件下で実行される関数であり、非同期処理やイベント処理などに頻繁に使用されます。

これらの概念を理解し、活用することで、柔軟かつ再利用性の高いコードを書くことができるようになります。関数型プログラミングの基本を抑えつつ、実際のコードに取り入れていきましょう。