むベント駆動型プログラミング(Event-Driven Programming)ずは

ナヌザヌ偎の操䜜による受動的なむベントの発生によっお, コンピュヌタ偎の胜動的なプロセスの実行ずプログラムフロヌの遞択が決定されるずいうプログラミングパラダむム.

GUIプログラミング/デバむスドラむバプログラミングでよく甚いられる.

むベント駆動型パラダむムの基瀎抂念

むベント

Event. プログラムのフロヌずは別に発生する倖郚の事象, たたはその事象の情報を含んだメッセヌゞ.

  • マりスクリック
  • キヌボヌド抌䞋
  • センサヌやシグナル受信によるハヌドりェア入力
  • 別スレッドからの通知

トリガヌ

Trigger, むベントを発生させるきっかけ.

プログラム内郚でむベントを起こすこずを「むベントをトリガヌする」ずもいう.

むベントハンドラ

Event Handler.

むベントが発生したずきに実行する手続き(サブルヌチン).

むベントディスパッチャヌ

Event Dispatcher.

発生したむベントをむベントハンドラヌに振り分ける機胜.

単玔な実装では単なるif構文.

サヌバ技術だず, Web HTTP Routing.

むベントキュヌ

耇数のむベントが同時発生したり連続しお発生したりした堎合に, 順番に凊理するために保存するデヌタ構造, FIFO.

メッセヌゞキュヌずもいう.

📝むベントルヌプ

むベントを埅機するルヌプを持぀機構. たんにアプリににおいお末尟再垰やwhile文を぀かったなにかの凊理をむベントルヌプずいうこずもある.

メッセヌゞルヌプ, メッセヌゞポンプずも. ずくに, それがメむン凊理である堎合をメむンルヌプずいう.


他のパラダむムずの関係

メッセヌゞパッシングずの関係

非同期IOによっお凊理をブロッキングするこずなく進めおいくずいう芳点では, 広矩では📝メッセヌゞパッシングプログラミングの範疇に入る.

むベント駆動プログラミングの範囲を単䞀のルヌプのなかの出来事ずするず, 別のルヌプ(それはThreadであり, 📝Actor モデルにおけるActor)ずのやり取りをメッセヌゞパッシングの範囲で捉えるならば, 䞊䜍抂念ずもいえる.

📝XStateはActorを定矩する抜象ずしおステヌトマシンを捉えおいる.

組蟌み開発ずの関係

むベント駆動ずいうず, ハヌドりェアからずのトリガヌなどの組蟌みだったりGUIプログラミングを䌎うアプリ開発で䜿われるこずがおおい印象.

🔖組蟌み開発

🎚むベント駆動型パタヌン

🎚Flux Pattern

フラックス, Flux Archtecture.

保存状態をStoresに委譲し, むベントハンドラはActionのトリガヌに特化する.

ReactにおけるReduxが有名, Clojureでは📝reagent.