Functional Programming Style 方法行為(Method)不俱副作用是函數風格程序的一個很重要的理念。Method 唯一的效果應該是計算並返回值。用這種方式工作的好處就是在方法之間很少糾纏在一起,因此程序也就更加可靠和可重用性。 函數編程(FP)函數語言的名稱源於這樣一種概念:程序行為應該像數學函數一樣;換句話說,給定一組輸入,函數應始終返回相同的輸出。這不僅意味著每個函數必須返回一個 值,還意味著從一個調用到下一個調用,函數本質上不得具有內蘊狀態(intrinsic state)。這種無狀態的內蘊概念(在函數/對象領域中,預設情況下指的是永遠不變的物件),是函數語言被認為是 C07.共時同作(Concurrency) 領域偉大的 「救世主」 的主要原因。 狀態不可變性函數式語言。這意味著其資料是不可變的,像 Java 的 String 一樣,並且沒有副作用帶來的風險。對資料的任意操作會產生一個該資料新的修改後的版本, 但原資料仍然不變。在談到健壯性的時候,不可變性是其需要高度注意的一個因素,因為沒有代碼可以無意間修改其它代碼依賴的資料,但從並發的觀點來看,不可 變性也是一個十分重要的特性。如果資料不可變,其被兩個並行執行路徑更改的風險就不存在,因為沒有辦法改變它且不需要保持同步,所以資料可以被拷貝到其它機器上。 不可變性 — Erlang強制了這一點,而且你幾乎無法繞過它。但是,與強制一個單一類型相比,你可以用Scala神奇強大的類型系統的剩餘部分去交換。我在進行Scala Actor編碼時使用不可變資料,而讓Scala的類型系統負責其它類型。 實際上對於不可變性問題並沒有多少工作需要處理。你只需要將你的相關類(消息)定義為不可變的,其它的就不用管了。
|
C08.論文研究(Research) >