FP是一些構想觀念,各種語言實踐FP的作法也可能有所不同,但是大致上來說,FP的共同點在於:「沒有副作用」、「第一級函數」。前者是指在表示式內不可以造成值的改變;後者是指函數被當作一般值對待,可當作「傳入參數」或「傳出結果」。 只要遵守函數編程(FP)的原則,管他用什麼語言,都可以進行FP。你可以用非函數式的語言(例如Java),進行FP;正如同你可以用非物件導向的語言(例如C),進行OOP(物件導向編程)一樣。但是只有想不開的人才會這麼做,畢竟這麼做是事倍功半。
1960年代左右,LISP誕生,被視為第一個函數式語言,從此越來越多函數式語言隨之出現。不過,畢竟Lambda Calculus是讓虛幻不存在的機器執行的,沒有受到真實世界的限制,所以真實世界的函數式語言雖然都是源自於Lambda Calculus,但卻都和Lambda Calculus之間有所差異。
由於FP只是一些構想觀念,各種語言實踐FP的作法也可能有所不同,但是大致上來說,
FP的共同點在於:「沒有副作用」(Side Effect)、「第一級函數」(First-Class Function)。前者是指在表示式(Expression)內不可以造成值的改變;後者是指函數被當作一般值對待,而不是次級公民,可當作「傳入參數」或「傳出結果」。
FP和我們慣用的程式編寫風格,有相當大的差異。Imperative Programming(命令式編程)認為程式的執行,就是一連串狀態的改變;但FP則將程式的運作,視為數學函數的計算,並且避免「狀態」和「可變資料」。但是,沒有狀態、沒有可變資料,程式要如何運作呢?事實上,FP使用函數,而函數可以「自動」幫我們保存資料。Imperative Programming的資料大量放在heap中;但FP則是放在堆疊(tack)內(或者由堆疊指向heap)。
全文>>
沒有留言:
張貼留言