コールバック関数 【callback function】
概要
コールバック関数(callback function)とは、コンピュータプログラム中で、ある関数を呼び出す際に引数などとして引き渡される別の関数のこと。呼び出し側の用意した関数を、呼び出し先のコードが「呼び出し返す」(callback)ように実行される。プログラムにおける関数は、別のコードから呼び出して実行することができるコードのまとまりで、呼び出し側は処理してほしい値などを「引数」として渡し、関数の実行が終了すると呼び出し側に処理結果が「返り値」として返される。
一般的な関数は引数として値や構造化されたデータ集合(配列など)などを受け付けるが、プログラミング言語によっては関数を引数として渡すことができる場合がある。これを利用して、関数内の処理の一部として外部から受け取った関数を実行することを「コールバック」、引数として渡す関数を「コールバック関数」という。
コールバック関数の具体的な実装はプログラミング言語の仕様により異なり、C言語のように関数へのポインタを渡す方式や、関数オブジェクトやクロージャを渡す方式、イベントリスナやイベントハンドラなどを登録する方式などがよく用いられる。
用途
コールバックの仕組みは、ライブラリやフレームワークなどの汎用的なプログラムでよく利用される。これらが実装している汎用的・抽象的なコードの一部を、開発者が自らが必要とする個別的・具体的な処理で置き換えることができる。
ライブラリなどが提供する機能が開発者の求める仕様に合致しない場合、内部のコードを書き換えるのは困難(提供方法によっては不可能)だが、処理の一部がコールバックとして実装されていれば、開発者は自分が必要とする処理を関数として記述するだけでよく、動作を柔軟に変更することができる。
例えば、あるプログラミング言語の標準ライブラリが高速で汎用的な並べ替え(ソート)関数を提供する場合に、二つの要素の比較(のみ)を行う関数をコールバック関数に指定できるようにしておけば、開発者が独自のデータ構造や複雑な比較処理に基づくソート関数を実装することができる。実際、C言語のqsort関数やJavaScriptのArray.sortメソッドは、比較を行うコールバック関数を渡すことができるようになっている。