イベントドリブンドリブンドリブン

いくつかの非同期のイベントを、シーケンシャルに正しい順番で行うにはどうすればいいのだろう。例えば、「犬が歩いて棒に当たって、棒の上にいた猿が落ちて、落ちた瞬間に吃驚した河童が川を流れていく」という、TV 番組の「ピタゴラスイッチ」みたいなイベントの連鎖です。

ハードコードするとこんな感じになる。過去形の関数がイベント。

dog.棒に当たる() {
  monkey.落ちた() {
    kappa.流れた() {
      終わり();
    }
    kappa.流れる();
  }
  monkey.落ちる();
}
dog.歩く();

ネストしてしまう。各イベントにリスナを作って、イベントと、付随する次の動作を管理する人がいればいいのかなー。犬と猿と河童はお互いを知らない方が好ましい。となると、コマンドキューイングが当てはまるのか。コマンドをキューに入れて逐次実行していけばよいらしい。

ってことは、犬や猿や河童の振る舞いを全て同じインターフェースに変換しないといけないのかー?do() と done() とかに。むむむ…。