1.5 声明式编程

回到编程范式的分类,我们之前阐述了命令式编程的概念,对比来看,声明式编程(Declarative Programming)在编码时关注的是要做成什么而不是怎么做;我们像管理者一样分配要做的事情,而不是亲力亲为地关注细节最优的ROI和效率。

常见的声明式语言和表现有逻辑式编程语言、函数式编程语言,以及一些相关形式,如正则表达式、组态管理系统(配置管理如YAML运维)等。代码层面使用可枚举集合的整体指令,如map和for...in代替了while和for的步进操作。

领域专用语言(Domain Specific Language, DSL)在设计系统顶层时经常用到,它不一定有完备的编程语言特征,但一般都能描述清楚编码者需要的信息,基本符合声明式编程特征。我们经常接触到的领域专用语言有SQL、XQuery/XML、CSS和Vue/Angular中的Controller(数据在模板文件上的绑定)等,如代码清单1-4所示。

代码清单1-4 声明式编程语言和领域专用语言


// SQL
SELECT * FROM Websites
WHERE name IN ('前端','函数式')

// XQuery
for $x in doc("books.xml")/bookstore/book
return if ($x/@category="CHILDREN")
       then <child>{data($x/title)}</child>
       else <adult>{data($x/title)}</adult>

实际上,声明式编程的内容很宽泛。我们跳出一些功能代码的内部实现,就能把外部的调用看成是声明式的。也就是说,小到一个语法糖,大到人工智能、逻辑式和函数式编程,都可以归纳为声明式编程。