先日プログラミングを学んでいて、「コールバック関数って何?」という疑問が浮かびました。
言葉だけ見ると難しそうですが、日常の例えで考えると一気に腑に落ちたので、
今回は「レストラン」を例に、コールバック関数をイメージで理解してみます。
コールバックがない場合(同期処理)
まずは、コールバックがない場合です。
あなたはレストランのカウンターで注文します。
あなた:「ハンバーガーください」
店員:「了解です。作りますので、その場で動かずに待っていてください」
- あなたはその場から動けません。
- 料理ができるまで5分間待機
- スマホも見られない
- 他のことは一切できない
店員:「はい、できました」
あなた:「やっとだ…」
この状態では、待っている間に何もできず非効率ですよね。
これがプログラミングでいう 同期処理 です。
コールバックがある場合(非同期処理)
次に、コールバックがある場合です。
あなた:「ハンバーガーください」
店員:「了解です。できたら呼びますので、この呼び出しベルを持って席で待ってください」
ここで渡される 呼び出しベル が、 コールバック関数 に相当します。
あなたは席に戻れるので
- スマホを見る
- 友達と話す
- 他の作業ができる
これらが問題なくできます。
そしてしばらくして…(料理完成)
店員:(呼び出しベルを鳴らす)
あなた:「呼ばれた!取りに行こう」
このように、「料理が完成したらやってほしい処理」をあらかじめ渡しておく
この仕組みが コールバック関数 です。
プログラミング的に言うとコールバック関数とは、「処理が終わったら呼び出してほしい関数を、先に渡しておくこと」です。
例)
function orderHamburger(callback) {
// ハンバーガーを作る(時間がかかる処理)
setTimeout(() => {
callback(); // 料理完成!呼び出しベルを鳴らす
}, 5000);
}
orderHamburger(() => {
console.log("ハンバーガーを受け取る");
});
- orderHamburger → 料理を作る処理
- callback → できたら実行してほしい処理
- callback() → ベルを鳴らす瞬間
という対応関係になります。
なぜコールバックが必要なのか?→ 理由はシンプルです。
- 時間がかかる処理を 待ち続けなくていい
- 他の処理を同時に進められる
- ユーザー体験が良くなる
JavaScriptが 非同期処理を多用する言語 である理由も、ここにあります。
#まとめ
- コールバック関数は「後で呼び出す約束の関数」
- レストランの 呼び出しベル をイメージすると理解しやすい
- 非同期処理では欠かせない考え方
最後までご覧いただきありがとうございました。