2015
Jul
06

Imperative 與 Declarative 都是一種寫程式的方式, Imperative 就是一般常見的寫程式方式,C/C++, Java , PHP, JavaScript, Python ,大部分的程式語言都適用 Imperative 的寫法。而 Declarative 的方式為撰寫程式的邏輯而不是處理過程,例如當我想要將一堆數字加總起來,這時 Imperative 的寫法像下面這樣:

Imperative Programming
  1. var num = [1, 2, 4, 5], total = 0;
  2. for (var i = 0 ; i < num.length ; i++) {
  3. total += num[i];
  4. }
Imperative programming : 寫程式如何一步一步去完成工作。


而使用 Declarative 來實作數字加總的寫法如下:

Declarative Programming
  1. var num = [1, 2, 4, 5], total= 0;
  2. total = num.sum();
Declarative programming : 寫程式說明我想要什麼樣的結果。

從這個例子可以看出 Declarative 的寫法比較容易閱讀,邏輯也比較清楚,透過 sum() 這個 method 讓我們可以一眼就看出他的回傳值是什麼,以及這個 Method 裡面會做什麼事;相對的 Imperative 的寫法通常會造成 functions 過於冗長,比較不容易看得懂。

上一段程式中我並沒有說明如何實作 sum() 這個 Method ,我可以在 Array prototype 中定義 sum 的實作過程。

Example
  1. Array.prototype.sum = function () {
  2. return this.reduce(function (total, cur) { return total + cur;})
  3. };

Declarative 的優點

  • 適合人類閱讀
  • 減少程式修改造成的 side effect
  • 程式邏輯清楚,接近 pseudocode 的語法。

另外幾種常見的 declarative programming 像是 SQL 語法或是 Regular expressions , 這兩種語法都不是直接寫一個 forloop 去對資料作操作,你只能寫出特定的語法告訴程式,你想要的得到什麼結果,例如下列的 SQL 語法,就是告訴程式,我要搜尋年齡大於 13 歲的使用者名稱。

select name from users where age > 13;

相關文章


回應 (Leave a comment)