イベント駆動型プログラミング(Event-Driven Programming)とは
ユーザー側の操作による受動的なイベントの発生によって, コンピュータ側の能動的なプロセスの実行とプログラムフローの選択が決定されるというプログラミングパラダイム.
GUIプログラミング/デバイスドライバプログラミングでよく用いられる.
イベント駆動型パラダイムの基礎概念
イベント
Event. プログラムのフローとは別に発生する外部の事象, またはその事象の情報を含んだメッセージ.
- マウスクリック
- キーボード押下
- センサーやシグナル受信によるハードウェア入力
- 別スレッドからの通知
トリガー
Trigger, イベントを発生させるきっかけ.
プログラム内部でイベントを起こすことを「イベントをトリガーする」ともいう.
イベントハンドラ
Event Handler.
イベントが発生したときに実行する手続き(サブルーチン).
イベントディスパッチャー
Event Dispatcher.
発生したイベントをイベントハンドラーに振り分ける機能.
単純な実装では単なるif構文.
サーバ技術だと, Web HTTP Routing.
イベントキュー
複数のイベントが同時発生したり連続して発生したりした場合に, 順番に処理するために保存するデータ構造, FIFO.
メッセージキューともいう.
📝イベントループ
イベントを待機するループを持つ機構. たんにアプリににおいて末尾再帰やwhile文をつかったなにかの処理をイベントループということもある.
メッセージループ, メッセージポンプとも. とくに, それがメイン処理である場合をメインループという.
他のパラダイムとの関係
メッセージパッシングとの関係
非同期IOによって処理をブロッキングすることなく進めていくという観点では, 広義では📝メッセージパッシングプログラミングの範疇に入る.
イベント駆動プログラミングの範囲を単一のループのなかの出来事とすると, 別のループ(それはThreadであり, 📝Actor モデルにおけるActor)とのやり取りをメッセージパッシングの範囲で捉えるならば, 上位概念ともいえる.
📝XStateはActorを定義する抽象としてステートマシンを捉えている.
組込み開発との関係
イベント駆動というと, ハードウェアからとのトリガーなどの組込みだったりGUIプログラミングを伴うアプリ開発で使われることがおおい印象.
🎨イベント駆動型パターン
- 🎨Command Pattern: 送信データのパッケージ.
- 🎨Observer Pattern: on/emit
- 🎓Publisher-Subscriberパターン: pub/sub
🎨Flux Pattern
フラックス, Flux Archtecture.
保存状態をStoresに委譲し, イベントハンドラはActionのトリガーに特化する.
ReactにおけるReduxが有名, Clojureでは📝reagent.