コールバック関数
関数だよ
他の関数に引数として渡されるよ
簡単に書くよ
コールバック関数(読:コールバックカンスウ 英:callback function)とは
「この関数
(処理のまとまり)、おまえの方で呼び出してや~」と関数に引数
(プログラムや関数に入れる値)として渡される関数のこと
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として「関数」と「引数(ヒキスウ)」について簡単に説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
関数は「何かを入れると何かをやって何かを返してくれる、処理のまとまり」です。
一般的には、入力を受けて処理をやり、その結果として出力があります。
引数は「プログラムや関数に渡す値」です。
ちょっと汚い話で恐縮ですが、人間は ご飯を食べて、ウンチを出します。
人間を関数だとすれば、ご飯に相当するものが引数です。
あと、ついでなので書いておくと、ウンチに相当するものは戻り値です。
以上を踏まえて
関数に引数として渡される関数
が「コールバック関数」です。
関数Aに引数として渡された関数Bは、関数Aの中で関数Bのお仕事をします。
このときの関数Bのことです。
なんだか早口言葉みたいですね。
イメージをつかんでいただくために、まずはピヨ太君に登場してもらいましょう。
ピヨ太君は何でも屋さんのお仕事をしています。
やってほしいことを書いた紙をお金と一緒に渡せば、紙に書いてあることをお仕事としてやってくれます。
お仕事が終わると、諸経費とピヨ太君への報酬を引いたお釣りを返してくれます。
この話における「やってほしいことを書いた紙」がコールバック関数です。
プログラムに当てはめると、ピヨ太君が「関数」です。
やってほしいことを書いた紙とお金が「引数」に相当します。
お釣りが「戻り値」となります。
また、ピヨ太君関数がやる処理は
1.やってほしいことを書いた紙の内容を実行する
2.諸経費とピヨ太君への報酬を引く
3.お釣りを返す
です。
これを、もう少しプログラムっぽい書き方に変えてみましょう。
例えば以下のように書けます。
お釣り ピヨ太君関数(お金,やってほしいことを書いた紙){
報酬=100円;
諸経費=やってほしいことを書いた紙の内容を実行;
お釣り=お金-諸経費-報酬;
return お釣り;
}
ピヨ太君関数は「お金」と「やってほしいことを書いた紙」を引数として受け取ります。
やってほしいことを書いた紙の内容を実行し、お金から諸経費と報酬を引きます。
残りがお釣りです。
お釣りを戻り値として返します。
ピヨ太君に渡すお金の金額や、やってほしいことを書いた紙の内容(ピヨ太君がお仕事する内容)が変われば、お釣りの額も変わります。
さて、ここで引数に注目してください。
ピヨ太君に渡すお金、これは実際のプログラムであれば、数値型の変数になるでしょう。
では、やってほしいことを書いた紙はどうでしょうね?
物としては紙ですが、大事なのは「やってほしいこと」の部分です。
つまり「処理」です。
やってほしいことを書いた紙は、実際のプログラムであれば処理をまとめたもの(関数)に相当します。
どうやらピヨ太君関数は、数値型の変数と関数を引数にとるようですね。
戻り値のお釣りは、お金なので数値型の変数でしょう。
これを踏まえて先程のピヨ太君関数をもう少し単純化すると、以下のようになります。
数値型 ピヨ太君関数(数値型,関数){
関数実行;
}
関数を引数として渡して、ピヨ太君関数の中で実行させていますね。
このような
「お前の方でやらせてや~」と引数として関数に渡す処理のまとまり(関数)
をコールバック関数と言います。
実際に引数として渡すのは関数ではなく関数ポインタ(関数のある場所が書いてある紙)だったりしますけどね。
そこら辺を説明しだすとキリがないので、これくらいにしておきます。
あっ、そうそう。
コールバック関数の名前の由来は気にしない方が無難です。
「コールバック関数」と呼ばれている理由を突っ込んで調べていくと、余計に分からなくなると思います。
一言でまとめるよ
まぁ「コールバック関数」って単語が出てきたら「関数
(処理のまとまり)に渡される関数なんだな~」と お考えください。
おまけ
■訳してみるよ
「call(コール)」の意味は「呼ぶ」とか「名前をつける」とか「電話をかける」とかです。
「back(バック)」の意味は「後ろ」とか「奥」とか「戻って」とか「後退する」とか「逆行する」とかです。
「関数」は日本語ですね。
何となく くっつけると
呼んで、戻す関数
となります。
■検索してみる?






