声明式(declarative)vs命令式(imperative)

声明式(declarative)是结果导向的,命令式(imperative)是过程导向的。它们都有自己适用的场景和局限,于是现实中的编程语言常常都有两者的身影。

命令式vs声明式

例如我们有一个用户列表,用 python 查找手机号为 183 开头的用户,可能会这么写:

1
2
3
4
5
6
def get_users():
ret = []
for user in users:
if user['phone'].startsWith('183'):
ret.append(user)
return ret

这是命令式的做法,给出通向目标的每个指令;而声明式语言则直接描述目标,如SQL可能会这么写:

1
SELECT * FROM users WHERE phone LIKE '183%';

显然,声明式语言对用户更友好,用户可以关心更少的细节。更重要的是:它允许多种底层实现方式,保持目标不变的同时不断优化,如上例中 SQL 的实现既可以遍历所有的用户,也可以使用索引来加速查找。

而命令式的好处自然是它的表达能力了,图灵完备的语言可以表达任何的可计算问题。

参考资料

声明式(declarative)vs命令式(imperative)