相信大家平時(shí)或多或少聽過不少關(guān)于“函數(shù)式編程” (FP)相關(guān)的詞語(yǔ),有些Geek經(jīng)常吹捧函數(shù)式的優(yōu)點(diǎn)或者特性比如:純函數(shù)無副作用、不變的數(shù)據(jù)、高階函數(shù)、流計(jì)算模式、尾遞歸、柯里化等等,再加上目前的函數(shù)式理論越來越多的應(yīng)用于工程中,OCaml,clojure, scala等FP語(yǔ)言日漸火爆。本編文章,筆者準(zhǔn)備帶領(lǐng)大家深入理解函數(shù)式編程的相關(guān)理論概念。
定義
首先引用維基百科對(duì)函數(shù)式編程的解釋:在計(jì)算機(jī)科學(xué)里,函數(shù)式編程是一種編程范式,它將計(jì)算描述為表達(dá)式求值并避免了狀態(tài)和數(shù)據(jù)改變。函數(shù)式編程里面的“函數(shù)”指的是數(shù)學(xué)函數(shù),數(shù)學(xué)函數(shù)和我們平時(shí)工作中遇到的編程函數(shù)有什么區(qū)別呢?
編程函數(shù)和數(shù)學(xué)函數(shù)
從上圖不難發(fā)現(xiàn):數(shù)學(xué)函數(shù)的特點(diǎn)是對(duì)于每一個(gè)自變量,存在唯一的因變量與之對(duì)應(yīng)。而編程函數(shù)的特點(diǎn)是參數(shù)和返回值都不是必須的,函數(shù)可能依賴外界或者影響外界。那么編程函數(shù)能否轉(zhuǎn)換成數(shù)學(xué)函數(shù),或者說我們的編程函數(shù)能否變成“純函數(shù)”?
如何轉(zhuǎn)換?
對(duì)于任何一個(gè)編程函數(shù),需要滿足下面3個(gè)條件,即可轉(zhuǎn)換成純數(shù)學(xué)函數(shù)。
每個(gè)函數(shù)必須包含輸入?yún)?shù)(作為自變量)
每個(gè)函數(shù)必須有返回值(作為因變量)
無論何時(shí),給定參數(shù)調(diào)用函數(shù)時(shí),返回值必須一致。