什么是 Pure Function

Pure Function,直譯一下就是「純函數(shù)」。

Pure Function 的概念很簡(jiǎn)單,也許你看到這個(gè)名詞就已經(jīng)明白這篇文章的主旨了 -- 但我還是需要通俗地解釋?zhuān)破眨┮幌拢吘惯@只是起點(diǎn)而已。

1. 在給定同樣的參數(shù)的前提下,Pure Function 都會(huì)返回同樣的結(jié)果。

例如:

function incresae(n) {
  return n + 1;
}

increase 函數(shù)的返回值總是在入?yún)?n 的基礎(chǔ)上增加 1。

這看起來(lái)十分合乎邏輯,但我們的程序肯定沒(méi)有那么簡(jiǎn)單,現(xiàn)在我們改寫(xiě)一下 increase 函數(shù):

var  number = 1;

function increase(n) {
  return n + number;
}

你一定發(fā)現(xiàn)了,increase 函數(shù)現(xiàn)在的返回值是由入?yún)?n 和外部定義的一個(gè)變量「計(jì)算」所得的。

如果我們的程序里有另一個(gè)函數(shù):

function doubleNumber(number) {
  return number * 2;
}

我想你一定知道我要表達(dá)的意思了:Fure Function 的返回值,只能由其函數(shù)入?yún)⑺鶝Q定,而不能有其他的干擾因素(比如這里的變量 number)。

**2. Pure Function 在計(jì)算返回值的時(shí)候不會(huì)產(chǎn)生 Side Effect **

所謂 Side Effect 就是我們?cè)谄綍r(shí)經(jīng)常做的一些工作,例如:I/O 操作,修改函數(shù)入?yún)⒒蚝瘮?shù)外部的變量,拋出異常等。

就 JavaScript 而言,我們常用的 console.log() 函數(shù) -- 會(huì)輸出內(nèi)容到控制臺(tái),用來(lái)生成隨機(jī)數(shù)的 Math.random() -- 會(huì)改變?nèi)值?seed,這實(shí)在是太多太多了。

你可以大概在腦海里列舉一下你所熟悉語(yǔ)言中那些會(huì)產(chǎn)生 Side Effect 的操作。

套用一個(gè)句式:

會(huì)產(chǎn)生 Side Effect 的 Function 不是真正的 Pure Function 。

可以想象的是,Pure Function 有很多的優(yōu)點(diǎn),例如:

每個(gè) Pure Function 的運(yùn)行結(jié)果都是可重現(xiàn)的。這樣的好處就是 Pure Function 十分容易進(jìn)行測(cè)試 -- 因?yàn)檫@完全是一個(gè)透明的盒子。

?

科普向的文章,寫(xiě)的有點(diǎn)啰嗦了,見(jiàn)諒。

參考內(nèi)容:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容