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 範例中
- 多一個 total 要 maintain, 而且值也不斷變化
- 多一個 i 要 maintain, 而且值也不斷變化
- 多一個判斷 i < array.length
當程式越來越複雜, state 就會越來越混亂與難控制. 但是當我使用 Declarative 可以將所有東西都封裝在 Array.prototype.reduce() 裡, 不需額外的變數, 最小的變動, 降低 bug 產生的機會.
More Readable
註解很重要!! 很重要 !! 很重要 !! 老師在說你有沒有在聽. 從大一資工系教授就不斷強調這點, 程式作業甚至註解佔超過一半成績. 使用 Declarative, 本身的程式就已經有意義. 相比 Imperative 在 How to do 的程式之外, 寫註解來解釋 What to do. 可讀性更高.