目標:將一個 Array 的所有值加總
var array = [3,2,1]
var total = 0
for( var i = 0 ; i <= array.length ; i ++ ){
total += array[i]
}
Imperative Programming
會寫出完整的計算過程,
如果演算非常複雜,
甚至出現巢狀 loop 或巢狀 object 時,
在畫面上會出現許多判斷與加減計算,
鉅細靡遺地告訴程式該「如何」做到。
var array = [3,2,1]
array.reduce( function( previous, current ){
return previous + current
})
Declarative Programming
則直接向程式宣告我想要的東西是什麼。
如上範例中,我要程式進行一個「reduce」,
並說明計算方式是「previous + current」,
至於實際要如何達成,則完全交給程式處理。
Declarative 的作法是將行為抽象化,
並把具體執行方式都封裝在Array.prototype.reduce()
裡,
不再需要額外的變數,盡可能減小變動,
以降低BUG產生的機會。
同時 Declarative 也具有明確的語意,
可以從宣告中理解執行的工作內容,
比 Imperative 擁有更高可讀性。
但使用 Declarative 的前提是,
JS 程式認識 reduce
這個方法,
知道該對資料進行何種處理。
另外,由於已經對行為抽象化,
具體實作方式完全交給了程式,
Declarative 在實際操作中的靈活性相對較低。