17
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

コールバック関数

Posted at

正直、こうしてまとめておくほどの内容ではないとは思うのですが。
まあ一応、誰かの助けになるかもしれないし。

とりあえず言語はCで。

これはコールバック関数なのか?

人の書いたソースを読んでいて、hogehoge_callback()という関数が出て来た。
名前からコールバック関数だと思ったのだが、どうにもその使われ方が、コールバック関数っぽくない。

コールバック関数ってなんだっけ?

そも、私のコールバックに関する認識が合ってるのか?
ちょっとコールバック関数がゲシュタルト崩壊してきたので、ググってみる。

wikipedia コールバック_(情報工学)

ううん、わかったような、わからないような……。
つまり、関数ポインタに渡される関数がコールバック関数である、と?

でもさー、別に普通の関数呼び出しじゃいけないのん?
そりゃあね、

イベントの発生を検知するための処理と、そのイベントが起こった時に実行すべき個々の処理を分離して記述することができる。
e-Words コールバック関数

ていうのはあるかもしれんけど。
非同期で呼び出されるならともかく、同期で呼び出されるなら普通の関数呼び出しで良くね?

呼び出した側、呼び出された側、どっち?

で、グーグル先生と相談してみたら、こういう解説を見つけた。

2010-09-09 コールバックの薦め

「呼び出し返す」とはつまり「(関数を)呼び出し返す」ということです
この「呼び出し返される関数」のことを「コールバック関数」と言います
……
またもう一つここで注目して欲しいのは「呼び出した側」と「呼び出された側」という2つの主体が存在していることです
……
「コールバック」と言うためには、そこに意味上の分断がある必要があります
……
即ち、その境界を越えて「呼び出された側」から「呼び出した側」へと「コール」し返す行為を「コールバック」と言うのです
ですから「コールバック」というのは「ある意味上の境界を越えて境界を越えてコールバック関数を呼び出す行為」であるとも言えます
そして意味上の境界を越えて処理が戻ってくるわけですから呼び出し返される「コールバック関数」というのは「呼び出した側」の主体に属するものであるということもわかります
「呼び出した側」の主体に属するのですから「コールバック関数」は「呼び出す側」が指定すべきものであるということもわかりますね

なーるーへーそー。
この説明なら納得出来ます。
ありがとうございました。

で、結局、これはコールバック関数なのか?

結論から言うと、見ていたソースでは、以下の二つの意味でXX_callback()という関数名が使われていた。

  1. (後で関数を)コールバック(してもらう事を依頼する)関数
  2. (本来の意味での)コールバック関数

ううん、これ、1に関しては、少なくとも引数の数と種類が同じなら、一つの関数にまとめておくべきだよね……。

以上。

17
15
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
17
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?