Imperative vs Declarative

兩種不同的程式設計

Imperative is How to do ?

Declarative is What to do ?

舉一個小例子: 將 Array 所有的值加總

// Imperative (How to do)
var array = [3,2,1]
var total = 0
for( var i = 0 ; i <= array.length ; i ++ ){
total += array[i]
}

上面的範例 Imperative, 是表示一段計算過程. 但是如果演算非常複雜, 甚至有巢狀的 object, 會看到一堆加減. 只是表示出來我如何做到.

// Declarative (What to do)
var array = [3,2,1]
array.reduce( function( previous, current ){ 
return previous + current
})

Declarative, 可以直接從宣告的方式, 知道我在做什麼.

Reduce Side Effects

Imperative 範例中

  1. 多一個 total 要 maintain, 而且值也不斷變化
  2. 多一個 i 要 maintain, 而且值也不斷變化
  3. 多一個判斷 i < array.length

當程式越來越複雜, state 就會越來越混亂與難控制. 但是當我使用 Declarative 可以將所有東西都封裝在 Array.prototype.reduce() 裡, 不需額外的變數, 最小的變動, 降低 bug 產生的機會.

More Readable

註解很重要!! 很重要 !! 很重要 !! 老師在說你有沒有在聽. 從大一資工系教授就不斷強調這點, 程式作業甚至註解佔超過一半成績. 使用 Declarative, 本身的程式就已經有意義. 相比 Imperative 在 How to do 的程式之外, 寫註解來解釋 What to do. 可讀性更高.