高階関数とは?
高階関数(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の関数型プログラミングにおける重要な概念です。高階関数は関数を引数として受け取り、または関数を返すことで柔軟な処理を提供します。コールバック関数は、特定の条件下で実行される関数であり、非同期処理やイベント処理などに頻繁に使用されます。
これらの概念を理解し、活用することで、柔軟かつ再利用性の高いコードを書くことができるようになります。関数型プログラミングの基本を抑えつつ、実際のコードに取り入れていきましょう。