事件驅動編程

(由事件處理器跳轉過嚟)

事件驅動編程英文event-driven programming,EDP)係一種編程範式,個程式流動事件(撳咗某個掣等)控制。一個用 EDP 寫嘅程式會有個主迴圈:當個程式處於主迴圈嗰陣,部電腦會進入「等事件發生」噉嘅狀態,而事件可以包括[1]

  • 用家撳咗踎士上面左掣」、
  • 「用家撳咗鍵盤上面嘅 W 掣」或者
  • 「用家撳咗鍵盤上面嘅 A 掣」
一個人攞住個遊戲手掣撳;想像家陣教部電腦「每當玩家撳咗 A 掣,就做...」、「每當玩家撳咗 B 掣,就做...」等嘅碼。

... 呀噉。個程式會同每件事件指定一段特定嘅子程序,叫部電腦每當嗰件事件發生嗰時,就做掕住嗰件事件嘅程序;簡化講例如想像一個遊戲程式,教部電腦「一旦用家撳咗遊戲手掣上面嘅 B 掣(事件發生),就要玩家角色起跳(子程序)」、「一旦用家撳咗遊戲手掣上面嘅 A 掣(事件發生),就要玩家角色向前衝(子程序)」... 呀噉。

喺廿一世紀初,EDP 係圖像用家介面上嘅標準做法,而且喺遊戲編程上都成日用到。有好多程式語言都支援用家攞 EDP 寫程式,例子有 Java 程式語言噉。

基本諗頭

編輯

EDP 嘅根基係事件嘅概念。電腦程式編寫上講嘅「事件」,係指由隻軟件留意到嘅一個行動或者一件事件,例如係「踎士左掣畀人撳咗」或者「鍵盤上邊個邊個掣畀人撳咗」... 呀噉。唔跟 EDP 嘅程式通常會係噉嘅[2][3]:p.5

而跟 EDP 嘅程式望落會比較似以下噉嘅流程[3][4]:p.1

  • 開始、
  • 進入事件迴圈
  • If 冇事件發生,繼續處於事件迴圈;
  • If 有事件發生(trigger),睇吓件事件係乜事,按事先講定嘅法則,決定要做乜(事件處理器;例如想像一個遊戲程式
    • 假想個程式設定咗「如果玩家撳咗 A 掣,玩家角色就起跳,然後程式返去事件迴圈」;
    • 假想個程式設定咗「如果玩家撳咗 esc,就結束程式」;

要圖像化嘅話,可以想像下圖:

 

實行

編輯

虛擬碼噉嘅形式表達嘅話,EDP 啲望落通常大致上會係噉嘅[5]

 OnKeyEnter("A")  # 如果用家撳咗鍵盤上面 "A" 掣嘅話...
 {
   ... # ... 就要做呢個 { } 入面嘅嘢。(睇埋子程序嘅概念)
 }
 
 OnKeyEnter("B")  # 如果用家撳咗鍵盤上面 "B" 掣嘅話...
 {
   ... # ... 就要做呢個 { } 入面嘅嘢。
 }
 
 OnKeyEnter("C")  # 如果用家撳咗鍵盤上面 "C" 掣嘅話...
 {
   ... # ... 就要做呢個 { } 入面嘅嘢。
 }

例子可以睇吓遊戲引擎 Unity 入面嘅 C♯ 手稿語言

睇埋

編輯

引咗

編輯

以下係呢篇文用咗嘅重要概念嘅英文名:

以下係篇文引咗嘅學術文獻或者網頁

  1. Lukkarinen, A., Malmi, L., & Haaranen, L. (2021). Event-driven programming in programming education: a mapping review (PDF). ACM Transactions on Computing Education (TOCE), 21(1), 1-31.
  2. Woodworth, P., & Dann, W. (1999). Integrating console and Event-Driven models in CS1. ACM SIGCSE Bulletin, 31(1), 132-135.
  3. 3.0 3.1 COMP6700/2140 GUI and Event Driven Programming (PDF).
  4. Dabek, F., Zeldovich, N., Kaashoek, F., Mazieres, D., & Morris, R. (2002, July). Event-driven programming for robust software (PDF). In Proceedings of the 10th workshop on ACM SIGOPS European workshop (pp. 186-189).
  5. Unity EventSystem - Part 1 EventSystem and Design Pattern. Medium.