程式概論

語言類型

靜態動態
編譯需要不需要
型態強調(強型態)不強調(弱型態)
效能較好較差
代表語言C, C++, JavaJavaScript, PHP, Python, Ruby

型態

型態類型關鍵字位元數範圍
整數byte8-128 ~ 127
整數short16-32768 ~ 32767
整數int32-2147483648 ~ 2147483647
整數long64-9223372036854775808 ~ 9223372036854775807
浮點數float32依據 IEEE 754 標準
浮點數double64依據 IEEE 754 標準
布林值boolean1true, flase
字元char16'\u0000' - '\uffff'

攸關記憶體使用量

強型態

int hp;

hp = 100;
hp = 200;
hp = "一百"; // error

弱型態

let hp;

hp = 100;
hp = 200;
hp = "一百"; // success

事件驅動 Event-driven

傳統流程

flowchart LR
    A[客戶]
    B[店家]
    C[餐點]
    D[確認]
    E[客戶 N]

    E-->| 排隊 | A
    A-->| 1.點餐 | B
    B-->| 2.製作 | C
    C-->| 3.完成 | D
    D-->| 4.提供 | A

  • 客戶需要在原地等待餐點製作完成才可以離開
  • 店家一次也只能服務一個客戶

優點

  • 確保餐點提供無誤 (原子性)
    • 點餐
    • 確認
  • 依序提供餐點 (有序性)
    • 排隊
  • 可避免超賣 (可見性)
    • 完成時得知庫存

缺點

  • 無法有效消化大量人流

事件驅動

flowchart LR
    A[客戶]
    B[店家]
    C[餐點]
    D[確認]
    E[客戶 N]
    F[廚師 N]
    G[自由行動]

    E-->| 排隊 | A
    A-->| 1.點餐 | B
    B-->| 2.給呼叫器| A
    A-->| 3.離開 | G
    B-->| 3.派單 | F
    B-->| 3N.服務 | E
    E-->| 3N-1.點餐 | B
    B-->| 3N-2.給呼叫器| E
    F-->| 4.製作| C
    C-->| 5.完成 | D
    D-->| 6.呼叫 | A
    A-->| 7.取餐 | B

優點

  • 可快速消化人潮
  • 透過增加廚師理論上可以增加餐點提供數量

缺點

  • 餐點可能做錯
  • 餐點可能給錯
  • 收單後發現庫存不足

名詞補充

原子性 Atomic

  • 操作內所有的動作、變更都順利完成
  • 操作失敗,內部的動作、變更全部不存在

有序性 Ordering

  • FIFO (First In First Out)
  • Queue

可見性 Visibility

  • 當有異動時,其他人也會得知異動後的值