聲明式編程(英語:Declarative programming)是一種編程範式,與命令式編程相對立。它描述目標的性質,讓計算機明白目標,而非流程。聲明式編程不用告訴計算機問題領域,從而避免隨之而來的副作用。而命令式編程則需要用算法來明確的指出每一步該怎么做。
基本介紹
- 中文名:宣告式編程
- 外文名:Declarative programming
- 學科:計算機科學
- 套用:軟體編程
- 又名:聲明式編程
簡介,定義,子編程範式,約束式編程,領域專屬語言,函式式編程,邏輯式編程,
簡介
聲明式編程(英語:Declarative programming)是一種編程範式,與命令式編程相對立。它描述目標的性質,讓計算機明白目標,而非流程。聲明式編程不用告訴計算機問題領域,從而避免隨之而來的副作用。而命令式編程則需要用算法來明確的指出每一步該怎么做。
定義
聲明式編程通常被定義為除命令式以外的編程範式。同時存在一些其他的定義,這些定義不是簡單的將聲明式編程和命令式編程做對比,例如:
- 聲明式編程是告訴計算機需要計算“什麼”而不是“如何”去計算
- 任何沒有副作用的程式語言,或者更確切一點,任何引用透明的程式語言
- 任何有嚴格計算邏輯的程式語言
這些定義有一些是重合的。
子編程範式
聲明式編程是一個大的概念,其下包含一些有名的子編程範式。
約束式編程
在約束式編程中,變數之間的關係是在約束中說明的,定義了問題的解的範圍。這些約束然後被應用程式來求解,以使得每個變數獲得一個值,並讓最多的約束得到滿足。
約束式編程經常被用作函式式編程、邏輯編程甚至命令式編程的補充。
領域專屬語言
一些著名的聲明式領域專屬語言(DSLs)包括yacc語法分析器,編譯說明語言Make,Puppet管理配置語言,正則表達式和SQL的一些子集(例如Select queries等)。DSLs有時非常有用,並且不需要是圖靈完全的,這往往讓其很容易以一種純聲明式的方式來表達。
函式式編程
函式式編程,特別是純函式式編程,嘗試最小化狀態帶來的副作用,因此被認為是聲明式的。大多數函式式程式語言,例如Scheme、Clojure、Haskell、OCaml、Standard ML和Unlambda,允許副作用的存在。
邏輯式編程
邏輯式程式語言如Prolog聲明關係並且對關係進行提問。同函式式編程一樣,許多邏輯程式語言允許副作用的存在。