什么是 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)系作者
  • 序言:七十年代末冰垄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌虹茶,老刑警劉巖逝薪,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蝴罪,居然都是意外死亡董济,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)要门,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)虏肾,“玉大人,你說(shuō)我怎么就攤上這事欢搜》夂溃” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵炒瘟,是天一觀的道長(zhǎng)吹埠。 經(jīng)常有香客問(wèn)我,道長(zhǎng)疮装,這世上最難降的妖魔是什么缘琅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮廓推,結(jié)果婚禮上刷袍,老公的妹妹穿的比我還像新娘。我一直安慰自己受啥,他們只是感情好做个,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著滚局,像睡著了一般居暖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上藤肢,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天太闺,我揣著相機(jī)與錄音,去河邊找鬼嘁圈。 笑死省骂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的最住。 我是一名探鬼主播钞澳,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼涨缚!你這毒婦竟也來(lái)了轧粟?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎兰吟,沒(méi)想到半個(gè)月后通惫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡混蔼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年履腋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惭嚣。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡遵湖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出料按,到底是詐尸還是另有隱情奄侠,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布载矿,位于F島的核電站垄潮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏闷盔。R本人自食惡果不足惜弯洗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逢勾。 院中可真熱鬧牡整,春花似錦、人聲如沸溺拱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)迫摔。三九已至沐扳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間句占,已是汗流浹背沪摄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纱烘,地道東北人杨拐。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像擂啥,于是被迫代替她去往敵國(guó)和親哄陶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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