2 應用函式式程式設計原則

2021-06-16 23:54:05 字數 986 閱讀 7329

函式式程式設計近期重新得到了主流程式設計社群的青睞。部分原因是函式式範例的新生特質很適用於應對產業轉向多核過程中的挑戰;那是一項重要的應用,但不是這篇短文鼓勵你了解函式式程式設計的原因。

掌握函式式程式設計範例,可以大大改進用其它文法編寫的**的質量。如果深入理解和應用函式式範例,你的設計可以在應用透明上展現出更高的襠次。

引用透明是非常理想的特性:它意味著給函式同樣的輸入,會得到同樣的結果,與何地、何時呼叫無關。即函式計算較少地、理想情況下完全不依賴可變狀態的附帶影響。

命令式語言存在不足之處乙個的主要原因是可變的變數。這裡的每位讀者可能都研究過為什麼某些情況下的有些數值不符合預期。可見性語法可以幫助減輕這些潛伏的缺陷,至少可以大大限制他們出現的範圍。但真正的成因可能實際上是由於設計上過度使用了可變性。

當然關於這點我們從產業中得不到多少幫助。物件導向的引入,會心照不宣地發展出這樣的設計,因為經常展示相對長壽的物件的組合圖,它們彼此歡樂地呼叫對方的賦值函式,這可能是危險的。然而,有了精明的測試驅動開發,特別是確用了「

mock roles, not objects

」,不必要的可變性可以從設計中排除掉。

最終會得到乙個典型地有更好的職責分配的設計,有著更多、更小的函式,僅依照傳給他們引數執行、不涉及可變的成員變數。這樣缺陷更少,而且除錯起來更加簡單,因為很容易在這樣的設計中定位是**引入了乙個錯誤的數值,而不用去推導某個特定的上下文導致了這個錯誤的賦值。這達到高檔次的引用透明,在學習函式式程式設計時,肯定沒有什麼比這些想法更能深入人心,這個計算模型是就是標準。

當然,並不是在所有情況下,這種方法都是最佳的。例如,在物件導向的系統中,這種設計結合領域模型開發(其中協同服務以降低商業規則的複雜性)會比使用者介面開發產出更好的結果。

掌握函式式程式設計範例,就可以將這些知識恰當地應用到其它領域。你的物件系統(對乙個來說)會與引用透明的優點產生共鳴,而且會比你原先所相信的更加接近它的函式式副本。實際上,有些人宣稱,函式式程式設計與物件導向,二者終究僅僅是彼此的倒影,是計算機中的陰和陽。

原文:byedward garson

函式式程式設計(2)

1.find函式接受乙個集合和乙個謂詞函式,並返回該謂詞為true時的第乙個元素。例 find 1,2,3,4 function num 32.all函式接受乙個集合和乙個謂詞,當對於所以的元素謂詞函式都返回true時,返回true。例 all 2,4,6,8 function num true 判...

函式式程式設計(2) 高階函式

1 什麼是程式設計正規化 2 程式設計函式與數學函式的關係。上篇文章介紹了函式式程式設計屬於宣告式程式設計正規化中的一種,它仿照數學概念中的公式演算去解決問題,是一種更接近數學語言的程式設計方式。並且我們知道函式式程式設計中所有的函式都是 純函式 pure function 因為只有純函式才符合數學...

函式式程式設計(2) 高階函式

1 什麼是程式設計正規化 2 程式設計函式與數學函式的關係。上篇文章介紹了函式式程式設計屬於宣告式程式設計正規化中的一種,它仿照數學概念中的公式演算去解決問題,是一種更接近數學語言的程式設計方式。並且我們知道函式式程式設計中所有的函式都是 純函式 pure function 因為只有純函式才符合數學...