如何開始函式程式設計的學習?
如果你習慣命令式語言(OOP),那麼FP所有那些宣告性程式碼片段可能會嚇到你。確實,函式語言背後確實有很多複雜而美麗的數學。么半群,仿函式,單子等等,但是你真的必須首先了解所有這些概念後才能開始函式程式設計嗎?
首先從第一個差異宣告正規化開始,宣告式程式設計的重點是應該做什麼事,而不是如何去做(後者是指令式程式設計)。命令式語言往往集中在一個程式的方法,明確如何實現具體操作及改變程式的狀態,而宣告式程式設計表達操作的邏輯(不要著眼於實現)。
當我們談論函數語言程式設計時,這可能是最流行的例子之一。在第一個doubleAll函式中,我們確切地告訴計算機應該如何做,我們將每個數字的兩倍追加到一個新陣列中,但之後我們也可以執行另一個操作(例如,遞增一些計數器,將其列印到控制檯)。我們明確告訴機器如何做到這一點。關於第二個函式,我們不關心實施; 相反,我們專注於應該做什麼,透過一個匿名函式map(該函式應用於一個陣列,能建立一個新的陣列,這個函式完全處理如何實現細節)。
其次,我會說人們應該理解不變性。這是使函數語言程式設計與其他範例有很大不同的事情之一。
函式應被視為資料,這意味著您可以返回函式或將它們作為引數傳遞,甚至可以組合以獲得所需的結果。因為它們是資料,所以它們也應該是純粹的 ; 這意味著如果你有一個名為is-number它的函式,從字面上看,檢查它是否是一個數字。不要試圖隱瞞任何其他責任(例如列印到控制檯,將一些記錄新增到資料庫):它必須按照它說的做。
如果要檢查它是否為數字,然後將其提交到資料庫(或任何其他日誌記錄材料),請建立另一個函式來訪問資料庫。然後,您可以將兩者組合成所需的輸出。當然會產生第三個,不合格 函式(資料庫被認為是I / O,而且這個新函式不純),但是,現在你有兩個獨立的函式,因此提高了程式碼的可維護性(和方便除錯!)。
首先從第一個差異宣告正規化開始,宣告式程式設計的重點是應該做什麼事,而不是如何去做(後者是指令式程式設計)。命令式語言往往集中在一個程式的方法,明確如何實現具體操作及改變程式的狀態,而宣告式程式設計表達操作的邏輯(不要著眼於實現)。
def doubleAll(arr): doubles = [] for elem in arr: doubles.append(elem*2) return doubles def doubleAll(arr): return map(lambda elem: elem * 2, arr) <p class="indent"> |
當我們談論函數語言程式設計時,這可能是最流行的例子之一。在第一個doubleAll函式中,我們確切地告訴計算機應該如何做,我們將每個數字的兩倍追加到一個新陣列中,但之後我們也可以執行另一個操作(例如,遞增一些計數器,將其列印到控制檯)。我們明確告訴機器如何做到這一點。關於第二個函式,我們不關心實施; 相反,我們專注於應該做什麼,透過一個匿名函式map(該函式應用於一個陣列,能建立一個新的陣列,這個函式完全處理如何實現細節)。
其次,我會說人們應該理解不變性。這是使函數語言程式設計與其他範例有很大不同的事情之一。
函式應被視為資料,這意味著您可以返回函式或將它們作為引數傳遞,甚至可以組合以獲得所需的結果。因為它們是資料,所以它們也應該是純粹的 ; 這意味著如果你有一個名為is-number它的函式,從字面上看,檢查它是否是一個數字。不要試圖隱瞞任何其他責任(例如列印到控制檯,將一些記錄新增到資料庫):它必須按照它說的做。
如果要檢查它是否為數字,然後將其提交到資料庫(或任何其他日誌記錄材料),請建立另一個函式來訪問資料庫。然後,您可以將兩者組合成所需的輸出。當然會產生第三個,不合格 函式(資料庫被認為是I / O,而且這個新函式不純),但是,現在你有兩個獨立的函式,因此提高了程式碼的可維護性(和方便除錯!)。
相關文章
- 好程式設計師學習筆記:函式程式設計師筆記函式
- 風變程式設計,幫助你從零開始學習程式設計程式設計
- 程式設計零基礎應該如何開始學習Python?程式設計Python
- 程式設計零基礎應當如何開始學習 Python?程式設計Python
- python程式設計學習筆記⑦-1函式Python程式設計筆記函式
- 《從零開始學Swift》學習筆記(Day 37)——預設建構函式Swift筆記函式
- 為什麼你該開始學習程式設計了?程式設計
- 程式設計師如何開始新的工作程式設計師
- 程式設計如何學習程式設計
- 翻譯 | 新手開始學習程式設計的正確姿勢程式設計
- 7種從頭開始免費學習程式設計的方法程式設計
- 【從零開始學習 MySql 資料庫】(2) 函式MySql資料庫函式
- 【從零開始學習Oracle資料庫】(2)函式Oracle資料庫函式
- 想學程式設計?這樣開始程式設計
- 從零開始學習如何部署程式碼
- 如何正確的開始用 Go 程式設計Go程式設計
- 函式程式設計函式程式設計
- go 學習筆記之學習函數語言程式設計前不要忘了函式基礎Go筆記函數程式設計函式
- 《從零開始學Swift》學習筆記(Day 40)——解構函式Swift筆記函式
- 新手學程式設計,從哪裡開始?程式設計
- Web 程式設計師開始學習遊戲開發的第一步Web程式設計師遊戲開發
- spark RDD的學習,filter函式的學習,split函式的學習SparkFilter函式
- JavaScript函數語言程式設計學習JavaScript函數程式設計
- JUC併發程式設計學習(十一)四大函式式介面(必備)程式設計函式
- 《從零開始學Swift》學習筆記(Day 21)——函式返回值Swift筆記函式
- 嵌入式程式設計學習(1)程式設計
- scala 函式程式設計函式程式設計
- 函式程式設計之道函式程式設計
- 為何開始教中文女友學程式設計程式設計
- 好程式設計師web前端學習路線分享函式基礎程式設計師Web前端函式
- 好程式設計師大資料學習路線分享UDF函式程式設計師大資料函式
- 使用 Python 的 toolz 庫開始函數語言程式設計Python函數程式設計
- 如何學會函數語言程式設計函數程式設計
- 我是如何學習計算機程式設計的計算機程式設計
- 函式的學習函式
- 如何開始學習Go語言Go
- 如何開始學習 Node.js?Node.js
- 程式設計師人生:如何開始,如何入門,如何前進程式設計師