Imperative programming v.s. Declarative programming

Imperative programming (指令式程式設計)

定義:
In computer science, imperative programming is a programming paradigm that uses statements that change a program’s state. In much the same way that the imperative mood in natural languages expresses commands, an imperative program consists of commands for the computer to perform. Imperative programming focuses on describing how a program operates. (from Wiki)
簡單來說Imperative programming就是用一連串的指令或statements來改變程式的state。所以Imperative programming著重在「how a program operates」。

缺點:
因為Imperative programming會改變程式的state,所以也有可能改變到function外的state,進而產生side effect。在專案較大時,debug的難度也大大增加 (p.s. 因為難以追蹤在什麼時候、哪一行code或function改變某個state)。

Declarative programming (宣告式程式設計)

定義:
Declarative programming is a programming paradigm—a style of building the structure and elements of computer programs—that expresses the logic of a computation without describing its control flow (from Wiki)
簡單來說Declarative programming就是一種建構程式結構的設計法,著重在「what to do」,而非「how to do」。

例子:
Those of database query languages (e.g., SQL, XQuery), regular expressions, logic programming, functional programming, and configuration management systems.