2015
Jul
06
Imperative 與 Declarative 都是一種寫程式的方式, Imperative 就是一般常見的寫程式方式,C/C++, Java , PHP, JavaScript, Python ,大部分的程式語言都適用 Imperative 的寫法。而 Declarative 的方式為撰寫程式的邏輯而不是處理過程,例如當我想要將一堆數字加總起來,這時 Imperative 的寫法像下面這樣:
Imperative Programming
- var num = [1, 2, 4, 5], total = 0;
- for (var i = 0 ; i < num.length ; i++) {
- total += num[i];
- }
Imperative programming : 寫程式如何一步一步去完成工作。
而使用 Declarative 來實作數字加總的寫法如下:
Declarative Programming
- var num = [1, 2, 4, 5], total= 0;
- total = num.sum();
Declarative programming : 寫程式說明我想要什麼樣的結果。
從這個例子可以看出 Declarative 的寫法比較容易閱讀,邏輯也比較清楚,透過 sum() 這個 method 讓我們可以一眼就看出他的回傳值是什麼,以及這個 Method 裡面會做什麼事;相對的 Imperative 的寫法通常會造成 functions 過於冗長,比較不容易看得懂。
上一段程式中我並沒有說明如何實作 sum() 這個 Method ,我可以在 Array prototype 中定義 sum 的實作過程。
Example
- Array.prototype.sum = function () {
- return this.reduce(function (total, cur) { return total + cur;})
- };
Declarative 的優點
- 適合人類閱讀
- 減少程式修改造成的 side effect
- 程式邏輯清楚,接近 pseudocode 的語法。
另外幾種常見的 declarative programming 像是 SQL 語法或是 Regular expressions , 這兩種語法都不是直接寫一個 forloop 去對資料作操作,你只能寫出特定的語法告訴程式,你想要的得到什麼結果,例如下列的 SQL 語法,就是告訴程式,我要搜尋年齡大於 13 歲的使用者名稱。
select name from users where age > 13;