函式程式設計基本原理介紹
經過很長一段時間的學習和麵向物件程式設計的工作,我退後一步思考系統的複雜性。
“複雜性是任何使軟體難以理解或修改的東西” - 約翰奧特豪特
做了一些研究以後,我發現了函數語言程式設計概念,如不變性和純函式。這些概念是構建無副作用功能的巨大優勢,因此維護系統更容易 - 還有其他一些ofollow,noindex" target="_blank">好處 。
純粹的函式
當我們想要理解函數語言程式設計時,我們學到的第一個基本概念是純函式。但這究竟意味著什麼?是什麼讓一個函式純潔?這是一個非常嚴格的純度定義:
- 如果給出相同的引數,它返回相同的結果(也稱為deterministic確定性)
- 它不會引起任何可觀察到的副作用
如果你的函式中使用了全域性物件則為不純;如果我們的函式讀取外部檔案,它不是純函式 - 檔案的內容可以更改;任何依賴於隨機數生成器的函式都不可能是純粹的。
每個函式都是孤立的,無法影響我們系統的其他部分。純函式是穩定,一致和可預測的。給定相同的引數,純函式將始終返回相同的結果。是否會發生相同的引數具有不同的結果?我們不需要考慮這種情況 - 因為它永遠不會發生。
純函式的好處
程式碼肯定更容易測試。我們不需要模仿任何東西。所以我們可以用不同的上下文單元測試純函式:
- 給定引數A→期望函式返回值B
- 給定引數C→期望函式返回值D
不變性: 隨著時間的推移不變或無法改變。當資料不可變時,其在建立後就不能被更改。如果要更改不可變物件,使用新值重新建立一個新物件。
引用透明:純函式+不可變資料=引用透明。基本上,如果函式對於相同的輸入始終產生相同的結果,則它是引用透明的。
其他
使用懶惰載入,保持不變性,實現函式組合,禁止空物件,禁止丟擲異常等等。