🦔

コールバック関数なんて関数は存在するのか

2024/06/06に公開

コールバック関数

コールバック関数はプログラミングをしているとよく耳にします。
耳にするたびにコールバック関数について調べるのですが、どうも記憶に定着しません。

記憶に定着しないときは概して、ちゃんと理解できていない点や、腑に落ちていない点があるときなので、私のコールバック関数に対する理解をまとめてみました。

他の関数の引数として渡される関数のこと

コールバック関数とは、他の関数の引数として渡される「関数」です。

ということは、下記はまだ、ただの関数です。

function funcA() {
    console.log("funcA");
}

こちらはどうでしょう?

function funcA() {
    console.log("funcA");
}

function funcB(paramFunc){
    console.log("funcB");
    paramFunc(); 
}

funcB(funcA); // funcB funcA

このとき、funcA はコールバック関数ですか?
たしかに、funcAは、別の関数funcBの引数として渡されました。
けど、funcAはただの関数です。

「コールバック関数」は、「関数」を引数に取る関数ありきの用語です。
ある関数は、「関数」を引数に取る関数の引数に指定されたとき、その「関数」を引数に取る関数の中でのみ、コールバック関数と呼ばれることができます。

コールバック関数 = 引数に指定された関数

なので言葉の使い方は、以下のようになります。
funcBのコールバック関数は、funcAです。
funcBのコールバック関数に、funcAを指定する。
funcAfuncBのコールバック関数です。

なのでこんな表現は微妙です。

✕ コールバック関数を受け取る関数
コールバック関数は受け取れません。(正:関数を受け取る関数)

funcAはコールバック関数です。
否、funcAは関数です。他の関数のコールバック関数ではあり得ます。

言い換えとして下記は可能かと思います。

  • funcBの引数の関数は、(cnt)=>cnt++です。
  • funcBのコールバック関数は、(cnt)=>cnt++です。

おわり

私のコールバック関数の違和感が解消できるようにまとめてみました。
参考になればと思います。

Discussion