《JS函數(shù)式編程指南》讀書筆記

JS函數(shù)式編程指南

函數(shù)是一等公民

函數(shù)式編程的目的

函數(shù)式編程的目的是使用函數(shù)來抽象作用在數(shù)據(jù)之上的控制流和操作迷守,從而在系統(tǒng)中消除副作用并減少對狀態(tài)的改變煞肾。

函數(shù)式編程的概念

  • 聲明式編程
  • 純函數(shù)
  • 引用透明
  • 不可變性

聲明式編程

函數(shù)式編程屬于聲明是編程范式:這種范式會描述一系列的操作扫俺,但并不會暴露它們是如何實現(xiàn)的或是數(shù)據(jù)流如何傳過它們画饥。
聲明式是將程序的描述與求值分離開來岭皂。它關(guān)注如何用各種表達式來描述程序邏輯见擦,而不一定要指明其控制流或狀態(tài)關(guān)系的變化摘完。

純函數(shù)

純函數(shù)指沒有副作用的函數(shù)姥饰。相同的輸入有相同的輸出,就跟我們上學(xué)學(xué)的函數(shù)一樣孝治,常常這些情況會產(chǎn)生副作用列粪。

改變一個全局的變量审磁、屬性或數(shù)據(jù)結(jié)構(gòu)
改變一個函數(shù)參數(shù)的原始值
處理用戶輸入
拋出一個異常
屏幕打印或記錄日志
查詢 HTML 文檔,瀏覽器的 Cookie 或訪問數(shù)據(jù)庫

純函數(shù)的性質(zhì)
  1. 僅取決于提供的輸入岂座,而不依賴于任何在函數(shù)求值或調(diào)用間隔時可能變化的隱藏狀態(tài)和外部狀態(tài)态蒂。
  2. 不會造成超出作用域的變化,例如修改全局變量或引用傳遞的參數(shù)费什。

引用透明

引用透明是定義一個純函數(shù)較為正確的方法钾恢。純度在這個意義上表面一個函數(shù)的參數(shù)和返回值之間映射的純的關(guān)系。如果一個函數(shù)對于相同的輸入始終產(chǎn)生相同的結(jié)果鸳址,那么我們就說它是引用透明瘩蚪。

使用純函數(shù)的代碼絕不會更改或破壞全局狀態(tài),有助于提高代碼的可測試性和可維護性

函數(shù)式編程采用聲明式的風(fēng)格稿黍,易于推理疹瘦,提高代碼的可讀性。

函數(shù)式編程將函數(shù)視為積木巡球,通過一等高階函數(shù)來提高代碼的模塊化和可重用性言沐。

可以利用響應(yīng)式編程組合各個函數(shù)來降低事件驅(qū)動程序的復(fù)雜性(這點后面可能會單獨拿一篇來進行講解)。

curry(柯里化)

curry 的概念很簡單:只傳遞給函數(shù)一部分參數(shù)來調(diào)用它酣栈,讓它返回一個函數(shù)去處理剩下的參數(shù)险胰。

組合函數(shù)

undercore實現(xiàn)

function aCompose(...args) {
    let length = args.length
    let count = length - 1
    let result
    return function f1 (...arg1) {
        result = args[count].apply(this, arg1)
        if (count <= 0) {
          count = length - 1
          return result
        }
        count--
        return f1.call(null, result)
    }
}

函數(shù)式實現(xiàn)

function compose(...args) {
    return (result) => {
        return args.reduceRight((result, fn) => {
          return fn(result)
        }, result)
  }
}

注意:要傳給 compose 函數(shù)是有規(guī)范的,首先函數(shù)的執(zhí)行是從最后一個參數(shù)開始執(zhí)行钉嘹,一直執(zhí)行到第一個鸯乃,而且對于傳給 compose 作為參數(shù)的函數(shù)也是有要求的鲸阻,必須只有一個形參跋涣,而且函數(shù)的返回值是下一個函數(shù)的實參。

tacit programming

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鸟悴,一起剝皮案震驚了整個濱河市陈辱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌细诸,老刑警劉巖沛贪,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異震贵,居然都是意外死亡利赋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門猩系,熙熙樓的掌柜王于貴愁眉苦臉地迎上來媚送,“玉大人,你說我怎么就攤上這事寇甸√临耍” “怎么了疗涉?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吟秩。 經(jīng)常有香客問我咱扣,道長,這世上最難降的妖魔是什么涵防? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任闹伪,我火速辦了婚禮,結(jié)果婚禮上壮池,老公的妹妹穿的比我還像新娘祭往。我一直安慰自己,他們只是感情好火窒,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布硼补。 她就那樣靜靜地躺著,像睡著了一般熏矿。 火紅的嫁衣襯著肌膚如雪已骇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天票编,我揣著相機與錄音褪储,去河邊找鬼。 笑死慧域,一個胖子當(dāng)著我的面吹牛鲤竹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昔榴,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辛藻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了互订?” 一聲冷哼從身側(cè)響起吱肌,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仰禽,沒想到半個月后氮墨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡吐葵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年规揪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片温峭。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡猛铅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诚镰,到底是詐尸還是另有隱情奕坟,我是刑警寧澤祥款,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站月杉,受9級特大地震影響刃跛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜苛萎,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一桨昙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧腌歉,春花似錦蛙酪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至馍驯,卻和暖如春阁危,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背汰瘫。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工狂打, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人混弥。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓趴乡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蝗拿。 傳聞我的和親對象是個殘疾皇子晾捏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

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