声明式编程(英语:Declarative programming)是一种编程范式,与命令式编程相对立。它描述目标的性质,让计算机明白目标,而非流程。声明式编程不用告诉计算机问题领域,从而避免随之而来的副作用。而命令式编程则需要用算法来明确的指出每一步该怎么做。
声明式编程通常被定义为除
命令式以外的编程范式。同时存在一些其他的定义,这些定义不是简单的将声明式编程和命令式编程做对比,例如:
一些著名的声明式领域专属语言(DSLs)包括
yacc语法分析器,编译说明语言Make,
Puppet管理配置语言,
正则表达式和
SQL的一些子集(例如Select queries等)。DSLs有时非常有用,并且不需要是
图灵完全的,这往往让其很容易以一种纯声明式的方式来表达。
函数式编程,特别是纯函数式编程,尝试最小化状态带来的副作用,因此被认为是声明式的。大多数函数式编程语言,例如
Scheme、
Clojure、
Haskell、
OCaml、Standard ML和Unlambda,允许副作用的存在。
逻辑式编程语言如
Prolog声明关系并且对关系进行提问。同函数式编程一样,许多逻辑编程语言允许副作用的存在。