程式編寫範式

簡稱編程範式，係電腦程式編寫上嘅一個概念。一套編程範式指一套做程式編寫嘅「風格」。

基礎概念

最簡單噉講，一套程式編寫範式可以想像成一種做程式編寫嘅「處理方法」。

抽象化

原則上，無論一個電腦程式用咩程式語言寫，部電腦內部實際上都係行緊機械碼。程式語言做嘅，係將電腦做緊嘅運算抽象化。

例子可以想像部電腦，部機識用 add() 將兩個數加埋，即係
  add(1,2) 會得出 3
  add(3,4) 會得出 7
... 如此類推。噉「攞  個數，當中 ，將啲數冚唪唥加埋嗮一齊」呢樣運算作業查實可以想像成－
用 add() 將第 1 個數同第 2 個數加埋，得出個數叫 s；
用 add() 將 s 同第 3 個數加埋，得出嘅數擺落 s 度
... 一路做到加埋嗮啲數為止；想像家陣隻程式語言將 add() 同埋啲必需嘅數據操作功能「包埋一嚿」整做 sum() 呢句陳述式，句嘢會叫部電腦將入面嗰拃數加埋嗮一齊；噉用家寫程式就可以寫
  x = sum(1,2,3,4) # 將 x 設做 1 2 3 4 加埋得出嘅值。
而唔使寫
  x = add(1,2)
  x = add(x,3)
  x = add(x,4)
咁撈絞。抽象化係電腦科學上非常重要嘅一部份，令啲人寫程式嗰陣方便好多。

程式語言

喺廿一世紀初，資訊科技工作上有好多隻唔同嘅程式語言，比較出名嘅有 Python、Java、JavaScript、C 同埋 C＃ 呀噉。唔同嘅程式語言偏重嘅功能都唔同，所以喺「抽象化咗啲乜」呢點上都唔同，例如
Processing 呢隻語言係專門設計嚟整圖像嘅，所以會有陳述式畀用家用 circle(224, 184, 220) 噉嘅一行碼就畫個圓形出嚟－即係將「畫圓形」當中涉及嗰一大拃運算抽象化，整做一句陳述式 circle() ；第啲程式語言，多數因為唔係設計嚟整圖像嘅，所以冇啲噉嘅功能；
又例如如果話「Python 支援物件導向編程」嘅話，即係話 Python 提供咗拃陳述式，方便用家用 OOP 呢種編程範式成日用到嗰啲功能，而唔支援 OOP 嘅程式語言就好可能係冇呢啲陳述式，所以唔方便用家用 OOP 寫程式。
噉即係話一套程式編寫範式可以想像成一拃成日畀人一齊用嘅功能，呢啲功能協作達致畀用家透過某套「處理方法」嚟解決編程上嘅問題。從事寫程式相關工作嘅人，往往需要知道自己做緊嘅工作要用邊種編程範式，並且揀返隻啱用嘅程式語言。

指令式

用指令式編程寫嘅程式，重點在於要向部電腦畀一連串嘅指示，教部電腦點樣一步一步噉改變自己嘅狀態，由初頭嘅狀態去到最終嘅狀態。

指令式編程成日畀人當係宣告式編程嘅相對。

物件導向

物件導向編程係一種常用嘅指令式編程範式，指建構程式嗰陣用「物件」嚟去做基本單元：個程式會有一個個嘅類別，每個類別會若干個實例，每個物件都係一個實例，會有若干份資料，而且每件同一類別嘅物件有嘅變數都一樣。例如以下呢段 C++ 碼噉：

class Car { // 「Car」係一個類別。
  public: // Car 嘅每一個實例都會有以下呢啲變數...
    string brand; // 牌子
    string model; // 型號
    int year; // 年份
};

呢種做法喺好多應用上都好幫到手令個程式更加容易打理，例：一位電子遊戲製作師喺度編寫佢隻新遊戲嘅遊戲程式，佢想創造一個遊戲世界俾玩家喺裏面移動；佢想個虛擬世界設計成好似一個現實嘅城市噉，度緊個城市其中一條街要點設計，佢想條街有幾架車泊咗喺度做背景，佢可以設定一個「車」嘅類別，個類別每個實例都有「色水」同「位置」等嘅變數，然後叫個程式將「建構一個車嘅實例」呢樣嘢做三次－就唔使吓吓都重新打過「建構一個車嘅實例」嘅碼。因為 OOP 咁好使好用，有好多常見嘅程式語言都支援 OOP，包括咗 C++、JavaScript 同埋好多遊戲引擎都支援嘅 C＃... 等等。

宣告式

函數式

第啲範式

結構化

結構化編程係一種源自 1950 年代嘅編程範式，旨在透過語法將流程控制嘅結構形式化，令到可以睇到出個程式嘅流程，從而令電腦程式更加清晰同高品質。

下面呢段虛擬碼，會令個程式行子程式 a 三次，等個程式員唔使將子程式 a 段碼寫三次，可以慳返啲位：

子程式 a

行子程式 a
  行子程式 a
  行子程式 a

如果冇咗子程式嘅使用，呢段碼就會變成：

子程式 a 嗰柞陳述式
  子程式 a 嗰柞陳述式
  子程式 a 嗰柞陳述式

冇子程式嘅做法有多種唔好處：個編程員喺編程嗰陣要重複將同一段碼寫幾次；如果佢想改子程式 a 入面嘅陳述式，佢就要改成三次；喺現實嘅程式製作當中，一個程序閒閒地可以需要重用十次以上，所以子程式嘅使用慳咗好多時間精神。再普遍啲講，對控制流程嘅運用－結構化編程嘅諗頭－幫編程員慳咗好多時間精神。

事件驅動

事件驅動編程用事件主導程式嘅流動。

EDP 上講嘅「事件」，係指由隻軟件留意到嘅一個行動或者一件事件，例如係「踎士左掣畀人撳咗」或者「鍵盤上邊個邊個掣畀人撳咗」... 呀噉。唔跟 EDP 嘅程式通常會係噉嘅：
開始 → 讀取 input → 運算 → 寫出 output → 結束
而跟 EDP 嘅程式望落會比較似以下噉嘅流程：
開始、
進入事件迴圈、
If 冇事件發生，繼續處於事件迴圈；
If 有事件發生，睇吓件事件係乜事，按事先講定嘅法則，決定要做乜；例如想像一個遊戲程式－
假想個程式設定咗「如果玩家撳咗 A 掣，玩家角色就起跳，然後程式返去事件迴圈」；
假想個程式設定咗「如果玩家撳咗 esc，就結束程式」；
例如廿一世紀初嘅遊戲編程就成日都會用到 EDP。

領域特定語言
圖靈完整性

攷

拎

Introduction of Programming Paradigms. GeeksForGeeks.
Classification of the principal programming paradigms.
How programming paradigms evolve and get adopted?.