声明式编程与命令式编程
命令式编程
imperative programming
最早的命令式语言是原始计算机的机器语言。在这些语言中,指令非常简单,这使得硬件实现更容易,但阻碍了复杂程序的创建。
用于为几乎所有计算机构建程序的编程范例通常遵循命令式模型。数字计算机硬件被设计为执行机器代码,机器代码是计算机本机的,通常以命令式风格编写,尽管某些体系结构(例如lisp 机器)存在使用其他范式的低级编译器和解释器。
所谓命令式编程主要是在表达“要怎样”,由开发者告诉计算机,执行一系列操作然后得到想要的结果,主要作用的是开发者,计算机只是帮助开发者执行计算。
命令式表达的是过程,越接近计算机的执行过程就叫越“命令式”
越接近计算机语言——“顺序+分支+循环”的操作流程——就越“命令式”。
声明式编程
declarative programming
声明式编程通常被定义为非命令式的任何编程风格。许多其他常见的定义试图通过简单地将其与命令式编程进行对比来定义它。例如:
- 描述计算应执行的操作的高级程序。
- 任何没有副作用的编程语言
- 一种与数理逻辑有明确对应关系的语言。
声明式编程是一种非命令式编程风格,其中程序描述其所需的结果,而无需明确列出必须执行的命令或步骤。函数式和逻辑编程语言的特点是声明式编程风格。在逻辑编程语言中,程序由逻辑语句组成,程序通过搜索语句的证明来执行。
当接口越是在表达“要什么”,直接告述计算它想要的结果,至于怎么做,由预先写好的程序依据一定的算法由计算机自动推算出来。
声明式描述的是结果,它不关心过程。比如 SQL,我们告述数据库的是,我们要查询某张表满足某某条件的数据,但我们并不会告述数据库怎么去查,怎么查数据是数据库系统自己关心的事情。