通過把大段代碼拆成函數(shù),通過一層一層的函數(shù)調(diào)用,就可以把復(fù)雜任務(wù)分解成簡單的任務(wù),這種分解可以稱之為面向過程的程序設(shè)計。函數(shù)就是面向過程的程序設(shè)計的基本單元。
而函數(shù)式編程(注意多了一個“式”字)--Functional Programming,雖然也可以歸結(jié)到面向過程的程序設(shè)計,但其思想更接近數(shù)學(xué)計算。
首先要搞明白計算機(Computer)和計算(Compute)的概念。
在計算機Computer的層次上,CPU執(zhí)行的是加減乘除的指令代碼,以及各種條件判斷和跳轉(zhuǎn)指令,所以,匯編語言是最貼近計算機的語言。
計算Compute則指數(shù)學(xué)意義上的計算,越是抽象的計算,離計算機硬件越遠。
越低級的語言,越貼近計算機,抽象程度低,執(zhí)行效率高,比如C語言;
越高級的語言,越貼近計算,抽象程度高,執(zhí)行效率低,比如Lisp語言。
函數(shù)式編程就是一種抽象程度很高的編程范式。
純粹的函數(shù)式編程語言編寫的函數(shù)沒有變量,因此,任意一個函數(shù),只要輸入是確定的,輸出就是確定的,這種純函數(shù)我們稱之為沒有副作用。
允許使用變量的程序設(shè)計語言,由于函數(shù)內(nèi)部的變量狀態(tài)不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數(shù)是有副作用的。
函數(shù)式編程的一個特點就是,允許把函數(shù)本身作為參數(shù)傳入另一個函數(shù),還允許返回一個函數(shù)。
- 函數(shù)式編程與命令式編程不同在于:
函數(shù)式編程關(guān)心數(shù)據(jù)的映射,命令式編程關(guān)心解決問題的步驟