**事件驅動程式設計**（英語：）是一種電腦編程範型。這種模型的程式執行流程是由使用者的動作（如滑鼠的按鍵，鍵盤的按鍵動作）或者是由其他程式的訊息來決定的。相對於批次程式設計（batch programming）而言，程式執行的流程是由程式設計師來決定。批处理（batch）的程式設計在初級程式設計教學課程上是一種方式。然而，事件驅動程式設計這種設計模型是在互動程序（Interactive program）的情況下孕育而生的。

事件驅動程序可以由任何程式語言來實作，然而使用某些語言來撰寫會比其他的語言來的簡單。有些整合開發環境（簡稱IDE）也會影響實作事件驅動程式設計的難易程度。有的 IDE 會使的開發工作變的很簡單，有的則否。

概觀
--

取代傳統上一次等待一個完整的指令然後再做執行的方式，事件驅動程式模型下的系統，基本上的架構是預先設計一個事件迴圈所形成的程序，這個事件迴圈程序不斷地檢查目前要處理的資訊，根據要處理的資訊執行一個**觸發函式**進行必要的處理。其中這個外部資訊可能來自一個目錄夾中的檔案，可能來自鍵盤或滑鼠的動作，或者是一個時間事件。

對一個事件驅動（event driven）系統進行程式設計，因此可以視為改寫系統預設觸發函式的行為，來符合自己需要的一種動作。輸入的事件可以放進事件迴圈或者是經由已經註冊的中斷處理器來與硬體事件互動；而許多的軟體系統使用了混和這兩種技術的處理。預先設計好的演算法確定了一件事，那就是當他們被需要的時候，就會在適當的時機被觸發。也因此提供了一個模擬中斷驅動環境（interrupt driven environment）的軟體抽象架構。事件驅動程式設計基本上包含了許多小程式片段，這些小程式片段被稱為事件處理器（英语：）並且被用來回應外部的事件與分發事件。通常尚未被事件處理器處理的事件，都會被系統放在一個稱為事件佇列的資料結構中，等待被處理。

許多情況下，事件處理器可以自己觸發事件，因此也可能形成一個事件串（英语：）。
事件驅動程式設計的著重於彈性以及非同步化上面，並且企圖盡可能的modeless。 图形用户界面這類程式就是典型的事件驅動設計方式。

計算機作業系統是事件驅動程式的典型範例。在作業系統的最底層，中斷處理器的動作就像是硬體事件的直接處理器，搭配著 CPU 執行分配事件規則動作。對軟體處理程序而言，基本上作業系統可視為一個事件分配器，傳送資料和軟體中斷給使用者自己寫的軟體處理程序。

相對應於批次程式設計
----------

下面是兩個數相加的範例，分別用批次版本與事件驅動版本來撰寫

  

### 批次版本

```
read a number (from the keyboard) and store it in variable A[0]
read a number (from the keyboard) and store it in variable A[1]
print A[0]+A[1]

```

### 事件驅動版本

```
set counter K to 0
repeat {
   if a number has been entered (from the keyboard) {
       store in A[K] and increment K
       if K equals 2 print A[0]+A[1] and reset K to 0
   }
}

```

事件驅動程式框架與程式庫
------------

* Eiffel Event Library
* Liboop, event loop management library （页面存档备份，存于）
* libsigc++, a callback framework for C++
* libevent, an event notification library for C/C++
* REBECA, Event-Based Electronic Commerce Architecture
* Tcl, Tcl language has event driven programming built in
* Twisted, Python
* POE, Perl
* PRADO, a component-based and event-driven Web programming framework for PHP 5
* Gui4Cli, an event driven programming language for Windows

|  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
编程语言类别（維基數據所列：） |
| --- |
|  |
| 范型 | 
* 指令式
* 过程式
* 函数式
* 逻辑式
* 基于类
* 面向对象
* 基于原型
* 基于对象
* 面向方面
* 数据流程
* 同步式
* 动态
* 脚本
* 元编程
* 宏
* 反射式
* 事件驱动
* 并发
* 基于演员
* 管道
* 阵列
* 串接式
* 面向堆栈
* 宣告式
* 模板
* 可扩展（英语：）
* 基于规则
* 领域特定
* 多范型
* 触控（英语：）

 |
|  |
| 层次 | 
* 机器
* 汇编
* 编译
* 解释
* 低级
* 高级
* 极高级

 |
|  |
| 有关 | 
* 世代
* 非英语基础（英语：）
* 可视化

 |

 |


|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
编程范型 |
| --- |
|  |
| 指令式 | 
* 过程式
* 非结构化
* 结构化
* 例外处理
* 模块化

 |
|  |
| 函数式 | 
* 纯函数式
* 全函数式
* 隐式
	+ 函数级
	+ 串接式
* 模式匹配
* 推导式

 |
|  |
| 面向对象 | 
* 基于类
* 基于原型
* 契约式
* 面向代理

 |
|  |
| 元编程 | 
* 
* 模板
* 反射式
	+ 同像性
	+ 元对象
	+ 元类
* 面向特性
* 面向语言

 |
|  |
| 数据流程 | 
* 同步式
* 响应式
	+ 函数式响应式
* 管道
* 串流处理
* 基于流程

 |
|  |
| 宣告式 | 
* 逻辑式
	+ 回答集
	+ 函数式逻辑
* 约束式
* 数据查询
* 框架本体

 |
|  |
| / | 
* 协程
* 演员模型
* 通信顺序进程
	+ 通道
* future/promise
* 分叉会合
* 整体同步
* 映射归约

 |
|  |
| 其他 | 
* 阵列式
* 面向堆栈
* 面向方面
* 数据驱动
* 事件驱动
* 自动机
* 可微分
* 概率式

 |
|  |
|          | 
* 块
* 递归
* 多态
	+ 运算符重载
	+ 泛型
	+ 多分派
* 头等对象
	+ 头等函数
	+ 闭包
* 实化
	+ 续体
* 非确定性

 |
|  |
| 多范型语言比较（英语：） |

 |