コールバックを平易な英語で説明するにはどうすればよいでしょうか? ある関数から別の関数を呼び出すこととどう違うのでしょうか? 質問する

コールバックを平易な英語で説明するにはどうすればよいでしょうか? ある関数から別の関数を呼び出すこととどう違うのでしょうか? 質問する

コールバックを平易な英語で説明するにはどうすればよいでしょうか。コールバックは、呼び出し関数から何らかのコンテキストを取得して、ある関数から別の関数を呼び出すこととどう違うのでしょうか。初心者プログラマーにコールバックの威力を説明するにはどうすればよいでしょうか。

ベストアンサー1

私はこれを非常にシンプルにしようとします。「コールバック」とは、最初の関数をパラメータとして受け取る別の関数によって呼び出される関数です。多くの場合、「コールバック」は何かが起こったときに呼び出される関数です。その何かは、プログラマー用語では「イベント」と呼ばれます。

次のようなシナリオを想像してください。あなたは数日後に荷物が届く予定です。荷物はご近所さんへの贈り物です。そのため、荷物を受け取ったら、ご近所さんに届けてもらいたいと考えています。あなたは外出中なので、配偶者に指示を残します。

荷物を受け取って近所の人に届けるように言うこともできます。もしあなたの配偶者がコンピューターのように愚かなら、荷物が届くまで玄関に座って待っていて(他に何もせず)、荷物が届いたら近所の人に届けるでしょう。しかし、もっと良い方法があります。配偶者に、荷物を受け取ったら近所の人に届けるように伝えてください。そうすれば、荷物を受け取るまでは通常通りの生活を送ることができます。

この例では、荷物を受け取ることが「イベント」であり、荷物を近所の人に届けることが「コールバック」です。あなたの配偶者は、荷物が到着したときにのみ、荷物を届けるようにというあなたの指示を「実行」します。ずっと良いですね!

このような考え方は日常生活では当然ですが、コンピューターには同じ種類の常識はありません。プログラマーが通常どのようにファイルに書き込むかを考えてみましょう。

fileObject = open(file)
# now that we have WAITED for the file to open, we can write to it
fileObject.write("We are writing to the file.")
# now we can continue doing the other, totally unrelated things our program does

ここでは、ファイルに書き込む前に、ファイルが開くのを待ちます。これにより実行フローが「ブロック」され、プログラムは必要な他の作業を実行できなくなります。代わりに、次のようにしたらどうでしょうか。

# we pass writeToFile (A CALLBACK FUNCTION!) to the open function
fileObject = open(file, writeToFile)
# execution continues flowing -- we don't wait for the file to be opened
# ONCE the file is opened we write to it, but while we wait WE CAN DO OTHER THINGS!

いくつかの言語やフレームワークでこれを実行できることがわかりました。とてもクールです!チェックしてみてくださいNode.jsこの種の考え方を実際に実践してみることです。

おすすめ記事