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;