很難想像沒有 Wikipedia 的日子…
以下出自 Wikipedia - http://en.wikipedia.org/wiki/Imperative_programming
一、Imperative programming (指令式編程)
imperative programs describes computation in terms of statements that change a program state
imperative programs define sequences of commands for the computer to perform.
「狀態」和「順序」是造成程式複雜的原因。
我發現如果是Imperative的做法,通常就會有全域變數。而全域變數通常較難追蹤,也就難以維護。想像一下這種情況:
某個全域變數,它的狀態會被3個不同的method,假設是A,B,C修改,當我要追蹤這個變數值時,就要先搞清楚A,B,C執行的先後順序。然後,既然是method,它就是創造出來被重複使用的,所以,我也得把重複呼叫的地方考慮進去。如果它還沒被封裝,很多物件都可以對它做修改…。很快我就可以寫出沒有人能維護的系統了。
二、宣告式編程(Declarative programming),可以解決這種問題。
The term is used in opposition to declarative programming, which expresses what the program should accomplish without prescribing how to do it in terms of sequences of actions to be taken.
Functional and logical programming are examples of a more declarative approach.
http://en.wikipedia.org/wiki/Declarative_programming
「宣告式編程」描述邏輯而不管流程。不考慮「順序」和「狀態」。
「宣告式編程」包括:
1.Regular expressions
2.Logic programming (例如:SQL)
3.Functional programming
4.Makeup Language (例如:HTML, MXML, SVG, XAML, XSLT)
以上都算是宣告式編程,但因為範圍太大,不再詳細討論。
三、函數式編程(Functional programming) http://en.wikipedia.org/wiki/Functional_programming
函數程式語言最重要的基礎是 λ 演算(lambda calculus)。而且λ演算的函式可以接受函式當作輸入(引數)和輸出(傳出值)。
和指令式編程相比,函式式編程強調函式的計算比指令的執行重要。
和程式編程相比,函式式編程裏,函式的計算可隨時調用。
函式式編程經常使用遞歸。
純函式式的程式沒有變數和副作用(Side effect)。因為純函式式程式設計語言沒有變數,函式沒有副作用,編寫出的程式可以利用memoization、common subexpression elimination和平行計算在執行時和編譯時得到大量優化。
函式式編程常被認為嚴重耗費在CPU和記憶體資源。主因有二:
早期的函式式編程語言沒有最佳化。
非函式式編程語言為求提昇速度,會在某些部分放棄邊界檢查或垃圾回收等功能。
以下是不同的聲音
http://jonbho.net/2012/01/24/i-want-to-fix-programming/
It is still composed of many discrete simple steps that excruciatingly calculate the output.
很棒的見解,感謝分享。:)
回覆刪除