歡迎光臨中圖網(wǎng) 請(qǐng) | 注冊(cè)
> >>
人民郵電出版社JAVASCRIPT函數(shù)式編程指南

人民郵電出版社JAVASCRIPT函數(shù)式編程指南

出版社:人民郵電出版社出版時(shí)間:2017-06-01
開(kāi)本: 其他 頁(yè)數(shù): 210
中 圖 價(jià):¥37.2(6.3折) 定價(jià)  ¥59.0 登錄后可看到會(huì)員價(jià)
加入購(gòu)物車(chē) 收藏
運(yùn)費(fèi)6元,滿39元免運(yùn)費(fèi)
?新疆、西藏除外
本類(lèi)五星書(shū)更多>
買(mǎi)過(guò)本商品的人還買(mǎi)了

人民郵電出版社JAVASCRIPT函數(shù)式編程指南 版權(quán)信息

人民郵電出版社JAVASCRIPT函數(shù)式編程指南 本書(shū)特色

本書(shū)主要介紹如何通過(guò)ECMAScript 6將函數(shù)式編程技術(shù)應(yīng)用于代碼,以降低代碼的復(fù)雜性。 本書(shū)共三部分內(nèi)容。*部分“函數(shù)式思想”是為第二部分的學(xué)習(xí)作鋪墊的,這一部分引入了對(duì)函數(shù)式JavaScript的描述,從一些核心的函數(shù)式概念入手,介紹了純函數(shù)、副作用以及聲明式編程等函數(shù)式編程的主要支柱:第二部分“函數(shù)式基礎(chǔ)”重點(diǎn)介紹函數(shù)式編程的核心技術(shù),如函數(shù)鏈、柯里化、組合、Monad等;第三部分“函數(shù)式技能提升”則是介紹使用函數(shù)式編程解決現(xiàn)實(shí)問(wèn)題的方法。 本書(shū)循序漸進(jìn)地將函數(shù)式編程的相關(guān)知識(shí)鋪陳開(kāi)來(lái),以理論作鋪墊,并鋪以實(shí)例,旨在幫助讀者更好地掌握這些內(nèi)容。如果讀者是對(duì)面向?qū)ο筌浖幸欢ǖ牧私猓覍?duì)現(xiàn)代Web應(yīng)用程序挑戰(zhàn)有一定認(rèn)識(shí)的JavaScript開(kāi)發(fā)人員,那么可以從中提升函數(shù)式編程技能。如果讀者是函數(shù)式編程的初學(xué)者,那么可以將本書(shū)作為入門(mén)書(shū)籍仔細(xì)閱讀,為今后的學(xué)習(xí)夯實(shí)基礎(chǔ)。

人民郵電出版社JAVASCRIPT函數(shù)式編程指南 內(nèi)容簡(jiǎn)介

本書(shū)主要介紹如何通過(guò)ECMAScript 6將函數(shù)式編程技術(shù)應(yīng)用于代碼,以降低代碼的復(fù)雜性。本書(shū)共三部分內(nèi)容?壳安糠帧昂瘮(shù)式思想”是為第二部分的學(xué)習(xí)作鋪墊的,這一部分引入了對(duì)函數(shù)式JavaScript的描述,從一些核心的函數(shù)式概念入手,介紹了純函數(shù)、副作用以及聲明式編程等函數(shù)式編程的主要支柱:第二部分“函數(shù)式基礎(chǔ)”重點(diǎn)介紹函數(shù)式編程的核心技術(shù),如函數(shù)鏈、柯里化、組合、Monad等;第三部分“函數(shù)式技能提升”則是介紹使用函數(shù)式編程解決現(xiàn)實(shí)問(wèn)題的方法。本書(shū)循序漸進(jìn)地將函數(shù)式編程的相關(guān)知識(shí)鋪陳開(kāi)來(lái),以理論作鋪墊,并鋪以實(shí)例,旨在幫助讀者更好地掌握這些內(nèi)容。如果讀者是對(duì)面向?qū)ο筌浖幸欢ǖ牧私猓覍?duì)現(xiàn)代Web應(yīng)用程序挑戰(zhàn)有一定認(rèn)識(shí)的JavaScript開(kāi)發(fā)人員,那么可以從中提升函數(shù)式編程技能。如果讀者是函數(shù)式編程的初學(xué)者,那么可以將本書(shū)作為入門(mén)書(shū)籍仔細(xì)閱讀,為今后的學(xué)習(xí)夯實(shí)基礎(chǔ)。

人民郵電出版社JAVASCRIPT函數(shù)式編程指南 目錄

目錄

第 一部分 函數(shù)式思想



第 1章 走近函數(shù)式 3

1.1 函數(shù)式編程有用嗎? 4

1.2 什么是函數(shù)式編程? 5

1.2.1 函數(shù)式編程是聲明式

編程 7

1.2.2 副作用帶來(lái)的問(wèn)題和

純函數(shù) 8

1.2.3 引用透明和可置換性 12

1.2.4 存儲(chǔ)不可變數(shù)據(jù) 13

1.3 函數(shù)式編程的優(yōu)點(diǎn) 14

1.3.1 鼓勵(lì)復(fù)雜任務(wù)的分解 15

1.3.2 使用流式鏈來(lái)處理數(shù)據(jù) 16

1.3.3 復(fù)雜異步應(yīng)用中的響應(yīng) 18

1.4 總結(jié) 19

第 2章 高階JavaScript 21

2.1 為什么要使用

JavaScript? 22

2.2 函數(shù)式與面向?qū)ο蟮某绦蛟O(shè)計(jì) 22

2.2.1 管理JavaScript對(duì)象的

狀態(tài) 28

2.2.2 將對(duì)象視為數(shù)值 29

2.2.3 深凍結(jié)可變部分 31

2.2.4 使用Lenses定位并修改對(duì)象圖 33

2.3 函數(shù) 34

2.3.1 一等函數(shù) 35

2.3.2 高階函數(shù) 36

2.3.3 函數(shù)調(diào)用的類(lèi)型 38

2.3.4 函數(shù)方法 39

2.4 閉包和作用域 40

2.4.1 全局作用域 42

2.4.2 函數(shù)作用域 43

2.4.3 偽塊作用域 44

2.4.4 閉包的實(shí)際應(yīng)用 45

2.5 總結(jié) 48



第二部分 函數(shù)式基礎(chǔ)



第3章 輕數(shù)據(jù)結(jié)構(gòu),重操作 51

3.1 理解程序的控制流 52

3.2 鏈接方法 53

3.3 函數(shù)鏈 54

3.3.1 了解 lambda 表達(dá)式 54

3.3.2 用_.map做數(shù)據(jù)變換 56

3.3.3 用_.reduce 收集結(jié)果 57

3.3.4 用_.filter 刪除不需要的

元素 61

3.4 代碼推理 62

3.4.1 聲明式惰性計(jì)算函數(shù)鏈 63

3.4.2 類(lèi)SQL的數(shù)據(jù):函數(shù)即

數(shù)據(jù) 66

3.5 學(xué)會(huì)遞歸地思考 68

3.5.1 什么是遞歸? 68

3.5.2 學(xué)會(huì)遞歸地思考 68

3.5.3 遞歸定義的數(shù)據(jù)結(jié)構(gòu) 70

3.6 總結(jié) 73

第4章 模塊化且可重用的

代碼 75

4.1 方法鏈與函數(shù)管道的

比較 76

4.1.1 方法鏈接 77

4.1.2 函數(shù)的管道化 78

4.2 管道函數(shù)的兼容條件 78

4.2.1 函數(shù)的類(lèi)型兼容條件 78

4.2.2 函數(shù)與元數(shù):元組的

應(yīng)用 79

4.3 柯里化的函數(shù)求值 82

4.3.1 仿真函數(shù)工廠 85

4.3.2 創(chuàng)建可重用的函數(shù)模板 86

4.4 部分應(yīng)用和函數(shù)綁定 87

4.4.1 核心語(yǔ)言擴(kuò)展 89

4.4.2 延遲函數(shù)綁定 89

4.5 組合函數(shù)管道 90

4.5.1 HTML部件的組合 91

4.5.2 函數(shù)組合:描述與求值

分離 92

4.5.3 函數(shù)式庫(kù)的組合 95

4.5.4 應(yīng)對(duì)純的代碼和不純的

代碼 96

4.5.5 point-free編程 98

4.6 使用函數(shù)組合子來(lái)管理

程序的控制流 99

4.6.1 identity(I-combinator) 99

4.6.2 tap(K-組合子) 99

4.6.3 alt(OR-組合子) 100

4.6.4 seq(S-組合子) 101

4.6.5 fork(join)組合子 101

4.7 總結(jié) 102

第5章 針對(duì)復(fù)雜應(yīng)用的設(shè)計(jì)

模式 103

5.1 命令式錯(cuò)誤處理的

不足 104

5.1.1 用try-catch處理錯(cuò)誤 104

5.1.2 函數(shù)式程序不應(yīng)拋出

異!105

5.1.3 空值(null)檢查問(wèn)題 106

5.2 一種更好的解決方案

——Functor 106

5.2.1 包裹不安全的值 107

5.2.2 Functor定義 108

5.3 使用Monad函數(shù)式地處理錯(cuò)誤 111

5.3.1 Monad:從控制流到

數(shù)據(jù)流 111

5.3.2 使用Maybe Monad和Either Monad來(lái)處理異!115

5.3.3 使用IO Monad與外部資源交互 123

5.4 Monadic鏈?zhǔn)秸{(diào)用及

組合 126

5.5 總結(jié) 131



第三部分 函數(shù)式技能提升



第6章 堅(jiān)不可摧的代碼 135

6.1 函數(shù)式編程對(duì)單元測(cè)試的影響 136

6.2 測(cè)試命令式代碼的

困難 137

6.2.1 難以識(shí)別和分解任務(wù) 137

6.2.2 對(duì)共享資源的依賴會(huì)導(dǎo)致結(jié)果不一致 138

6.2.3 按預(yù)定義順序執(zhí)行 139

6.3 測(cè)試函數(shù)式代碼 140

6.3.1 把函數(shù)當(dāng)作黑盒子 140

6.3.2 專(zhuān)注于業(yè)務(wù)邏輯,而不是控制流 141

6.3.3 使用Monadic式從不純的代碼中分離出純函數(shù) 142

6.3.4 mock外部依賴 144

6.4 通過(guò)屬性測(cè)試制定規(guī)格

說(shuō)明 146

6.5 通過(guò)代碼覆蓋率衡量有

效性 152

6.5.1 衡量函數(shù)式代碼測(cè)試的

有效性 152

6.5.2 衡量函數(shù)式代碼的

復(fù)雜性 155

6.6 總結(jié) 158

第7章 函數(shù)式優(yōu)化 159

7.1 函數(shù)執(zhí)行機(jī)制 160

7.1.1 柯里化與函數(shù)上下文

堆!161

7.1.2 遞歸的弱點(diǎn) 164

7.2 使用惰性求值推遲

執(zhí)行 165

7.2.1 使用函數(shù)式組合子避免重復(fù)計(jì)算 167

7.2.2 利用shortcut fusion 167

7.3 實(shí)現(xiàn)需要時(shí)調(diào)用的

策略 168

7.3.1 理解記憶化 169

7.3.2 記憶化計(jì)算密集型

函數(shù) 169

7.3.3 有效利用柯里化與

記憶化 172

7.3.4 通過(guò)分解來(lái)實(shí)現(xiàn)更大程度

的記憶化 173

7.3.5 記憶化遞歸調(diào)用 173

7.4 遞歸和尾遞歸優(yōu)化 175

7.5 總結(jié) 178

第8章 管理異步事件以及

數(shù)據(jù) 181

8.1 異步代碼的挑戰(zhàn) 182

8.1.1 在函數(shù)之間創(chuàng)建時(shí)間依賴

關(guān)系 182

8.1.2 陷入回調(diào)金字塔 183

8.1.3 使用持續(xù)傳遞式樣 186

8.2 一等公民Promise 188

8.2.1 鏈接將來(lái)的方法 190

8.2.2 組合同步和異步行為 195

8.3 生成惰性數(shù)據(jù) 197

8.3.1 生成器與遞歸 199

8.3.2 迭代器協(xié)議 200

8.4 使用RxJS進(jìn)行函數(shù)式和響應(yīng)式編程 202

8.4.1 數(shù)據(jù)作為Observable

序列 202

8.4.2 函數(shù)式編程與響應(yīng)式

編程 203

8.4.3 RxJS和Promise 205

8.5 總結(jié) 206

附錄 本書(shū)中使用的

JavaScript庫(kù) 207

函數(shù)式JavaScript庫(kù) 207

使用的其他庫(kù) 208







展開(kāi)全部

人民郵電出版社JAVASCRIPT函數(shù)式編程指南 作者簡(jiǎn)介

Luis Atencio(@luijar)是美國(guó)佛羅里達(dá)州勞德代爾堡的Citrix Systems公司的一名軟件工程師。他擁有計(jì)算機(jī)科學(xué)學(xué)士學(xué)位和碩士學(xué)位,現(xiàn)在使用JavaScript、Java和PHP平臺(tái)進(jìn)行全職開(kāi)發(fā)和構(gòu)建應(yīng)用程序。Luis積極參與社區(qū)活動(dòng),并經(jīng)常在當(dāng)?shù)氐木蹠?huì)和會(huì)議中發(fā)表演講。他在luisatencio.net上發(fā)布關(guān)于軟件工程的博客,并為雜志和DZone撰寫(xiě)文章,同時(shí)還是《RxJS in Action》的共同作者。

暫無(wú)評(píng)論……
書(shū)友推薦
編輯推薦
返回頂部
中圖網(wǎng)
在線客服