コールバック処理の実装方法について

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

プログラミング言語などで、何らかの非同期処理やイベントベースの処理を行う際に、「何らかのイベントが届いたら、こういう処理を行う」というような処理の仕方を行うときがある。例えば、ファイルのダウンロード処理などがそれに該当する。この場合は、ダウンロードが成功した、あるいは失敗した時にどうするのかを定義するということになる。

さて、ここではオブジェクト指向言語を使った場合を想定する。実装の仕方によって、大きく以下の処理の仕方が想定される。

  • インターフェースあるいはプロトコル、もしくは抽象クラスを利用して、そこで定義されたメソッドを使ってコールバック処理を行う。
  • コールバック用の関数オブジェクト、あるいはラムダ式などでコールバック処理を行う。

個人的に楽なのは前者である。処理が終わった時のオブジェクトにselfまたはthisをセットして、コールバック時のメソッドを定義することで実装できてしまうからである。ただ、この場合はメソッドが競合するという可能性もあるため、取り決めが必要になることになる。

それを防ぐという意味では、後者である。後者の場合は、特殊な記述を強いる面があるものの、柔軟な実装の仕方ができるという特徴がある。

コールバック時の処理の仕方はなかなか悩ましい部分はあるものの、是非とも最適な手法を使いたいものである。

タイトルとURLをコピーしました