函式程式設計基本原理介紹
經過很長一段時間的學習和物件導向程式設計的工作,我退後一步思考系統的複雜性。
“複雜性是任何使軟體難以理解或修改的東西” - 約翰奧特豪特
做了一些研究以後,我發現了函數語言程式設計概念,如不變性和純函式。這些概念是構建無副作用功能的巨大優勢,因此維護系統更容易 - 還有其他一些好處。
純粹的函式
當我們想要理解函數語言程式設計時,我們學到的第一個基本概念是純函式。但這究竟意味著什麼?是什麼讓一個函式純潔?這是一個非常嚴格的純度定義:
- 如果給出相同的引數,它返回相同的結果(也稱為deterministic確定性)
- 它不會引起任何可觀察到的副作用
如果你的函式中使用了全域性物件則為不純;如果我們的函式讀取外部檔案,它不是純函式 - 檔案的內容可以更改;任何依賴於隨機數生成器的函式都不可能是純粹的。
每個函式都是孤立的,無法影響我們系統的其他部分。純函式是穩定,一致和可預測的。給定相同的引數,純函式將始終返回相同的結果。是否會發生相同的引數具有不同的結果?我們不需要考慮這種情況 - 因為它永遠不會發生。
純函式的好處
程式碼肯定更容易測試。我們不需要模仿任何東西。所以我們可以用不同的上下文單元測試純函式:
- 給定引數A→期望函式返回值B
- 給定引數C→期望函式返回值D
不變性: 隨著時間的推移不變或無法改變。當資料不可變時,其在建立後就不能被更改。如果要更改不可變物件,使用新值重新建立一個新物件。
引用透明:純函式+不可變資料=引用透明。基本上,如果函式對於相同的輸入始終產生相同的結果,則它是引用透明的。
其他
使用懶惰載入,保持不變性,實現函式組合,禁止空物件,禁止丟擲異常等等。
相關文章
- 邏輯程式設計與函式程式設計的介紹程式設計函式
- JavaScript 函數語言程式設計介紹JavaScript函數程式設計
- Linux網路程式設計--初等網路函式介紹(TCP)(轉)Linux程式設計函式TCP
- ORACLE函式介紹Oracle函式
- TypeScript 函式介紹TypeScript函式
- stoi函式介紹函式
- javascript函數語言程式設計簡單介紹JavaScript函數程式設計
- 函數語言程式設計實用介紹(下)函數程式設計
- 函數語言程式設計實用介紹(上)函數程式設計
- NIO程式設計介紹程式設計
- 函式程式設計函式程式設計
- oracle常用函式介紹Oracle函式
- 機器學習基本函式介紹機器學習函式
- replaceChild()函式用法介紹函式
- lpad函式介紹函式
- oracle REPLACE 函式 介紹Oracle函式
- oracle 日期函式介紹Oracle函式
- CUDA常用函式介紹函式
- Trim() 函式的介紹函式
- GCD、dispatch 函式介紹GC函式
- cuda函式庫介紹函式
- 【函式】Oracle TRIM函式語法介紹函式Oracle
- Shell程式設計 --- Shell介紹程式設計
- Delphi COM程式設計介紹程式設計
- Java中函數語言程式設計Monad概念介紹Java函數程式設計
- 如何向新手程式設計師介紹程式設計?程式設計師
- 函式表示式和函式宣告簡單介紹函式
- scala 函式程式設計函式程式設計
- 函式程式設計之道函式程式設計
- python入門,程式設計基礎概念介紹(變數,條件,函式,迴圈)Python程式設計變數函式
- Dart建構函式介紹Dart函式
- javascript函式中with的介紹JavaScript函式
- funclib函式庫介紹函式
- 網路常用函式介紹函式
- Oracle 的基本函式介紹Oracle函式
- prototype.js函式介紹JS函式
- MATLAB 超程式設計介紹Matlab程式設計
- Signal ()函式詳細介紹 Linux函式函式Linux