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)