0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

コールバックの概念を「レストラン」で理解する

Posted at

先日プログラミングを学んでいて、「コールバック関数って何?」という疑問が浮かびました。

言葉だけ見ると難しそうですが、日常の例えで考えると一気に腑に落ちたので、
今回は「レストラン」を例に、コールバック関数をイメージで理解してみます。

コールバックがない場合(同期処理)

まずは、コールバックがない場合です。
あなたはレストランのカウンターで注文します。

あなた:「ハンバーガーください」
店員:「了解です。作りますので、その場で動かずに待っていてください」

  • あなたはその場から動けません。
  • 料理ができるまで5分間待機
  • スマホも見られない
  • 他のことは一切できない

店員:「はい、できました」
あなた:「やっとだ…」

この状態では、待っている間に何もできず非効率ですよね。

これがプログラミングでいう 同期処理 です。

コールバックがある場合(非同期処理)

次に、コールバックがある場合です。

あなた:「ハンバーガーください」
店員:「了解です。できたら呼びますので、この呼び出しベルを持って席で待ってください」

ここで渡される 呼び出しベル が、 コールバック関数 に相当します。

あなたは席に戻れるので

  • スマホを見る
  • 友達と話す
  • 他の作業ができる

これらが問題なくできます。

そしてしばらくして…(料理完成)

店員:(呼び出しベルを鳴らす)
あなた:「呼ばれた!取りに行こう」

このように、「料理が完成したらやってほしい処理」をあらかじめ渡しておく

この仕組みが コールバック関数 です。

プログラミング的に言うとコールバック関数とは、「処理が終わったら呼び出してほしい関数を、先に渡しておくこと」です。

例)

function orderHamburger(callback) {
  // ハンバーガーを作る(時間がかかる処理)
  setTimeout(() => {
    callback(); // 料理完成!呼び出しベルを鳴らす
  }, 5000);
}

orderHamburger(() => {
  console.log("ハンバーガーを受け取る");
});
  • orderHamburger → 料理を作る処理
  • callback → できたら実行してほしい処理
  • callback() → ベルを鳴らす瞬間

という対応関係になります。

なぜコールバックが必要なのか?→ 理由はシンプルです。

  • 時間がかかる処理を 待ち続けなくていい
  • 他の処理を同時に進められる
  • ユーザー体験が良くなる

JavaScriptが 非同期処理を多用する言語 である理由も、ここにあります。

#まとめ

  • コールバック関数は「後で呼び出す約束の関数」
  • レストランの 呼び出しベル をイメージすると理解しやすい
  • 非同期処理では欠かせない考え方

最後までご覧いただきありがとうございました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?