JavaScript函式式編程指南

JavaScript函式式編程指南

《JavaScript函式式編程指南》是2020年2月人民郵電出版社出版的圖書,作者是[美]路易斯·阿泰西奧(Luis Atencio)。

基本介紹

  • 中文名:JavaScript函式式編程指南
  • 作者:[美]路易斯·阿泰西奧(Luis Atencio)
  • ISBN:9787115462046
  • 頁數:210頁
  • 定價:59元
  • 出版社:人民郵電出版社
  • 出版時間:2020年2月
  • 裝幀:平裝
  • 開本:16開
內容簡介,圖書目錄,

內容簡介

本書主要介紹如何通過ECMAScript 6將函式式編程技術套用於代碼,以降低代碼的複雜性。
本書共三部分內容。第一部分“函式式思想”是為第二部分的學習作鋪墊的,這一部分引入了對函式式JavaScript的描述,從一些核心的函式式概念入手,介紹了純函式、副作用以及聲明式編程等函式式編程的主要支柱:第二部分“函式式基礎”重點介紹函式式編程的核心技術,如函式鏈、柯里化、組合、Monad等;第三部分“函式式技能提升”則是介紹使用函式式編程解決現實問題的方法。
本書循序漸進地將函式式編程的相關知識鋪陳開來,以理論作鋪墊,並鋪以實例,旨在幫助讀者更好地掌握這些內容。如果讀者是對面向對象軟體有一定的了解,且對現代Web應用程式挑戰有一定認識的JavaScript開發人員,那么可以從中提升函式式編程技能。如果讀者是函式式編程的初學者,那么可以將本書作為入門書籍仔細閱讀,為今後的學習夯實基礎。

圖書目錄

第 一部分 函式式思想
第 1章 走近函式式 3
1.1 函式式編程有用嗎? 4
1.2 什麼是函式式編程? 5
1.2.1 函式式編程是聲明式
編程 7
1.2.2 副作用帶來的問題和
純函式 8
1.2.3 引用透明和可置換性 12
1.2.4 存儲不可變數據 13
1.3 函式式編程的優點 14
1.3.1 鼓勵複雜任務的分解 15
1.3.2 使用流式鏈來處理數據 16
1.3.3 複雜異步套用中的回響 18
1.4 總結 19
第 2章 高階JavaScript 21
2.1 為什麼要使用
JavaScript? 22
2.2 函式式與面向對象的程式設計 22
2.2.1 管理JavaScript對象的
狀態 28
2.2.2 將對象視為數值 29
2.2.3 深凍結可變部分 31
2.2.4 使用Lenses定位並修改對象圖 33
2.3 函式 34
2.3.1 一等函式 35
2.3.2 高階函式 36
2.3.3 函式調用的類型 38
2.3.4 函式方法 39
2.4 閉包和作用域 40
2.4.1 全局作用域 42
2.4.2 函式作用域 43
2.4.3 偽塊作用域 44
2.4.4 閉包的實際套用 45
2.5 總結 48
第二部分 函式式基礎
第3章 輕數據結構,重操作 51
3.1 理解程式的控制流 52
3.2 連結方法 53
3.3 函式鏈 54
3.3.1 了解 lambda 表達式 54
3.3.2 用_.map做數據變換 56
3.3.3 用_.reduce 收集結果 57
3.3.4 用_.filter 刪除不需要的
元素 61
3.4 代碼推理 62
3.4.1 聲明式惰性計算函式鏈 63
3.4.2 類SQL的數據:函式即
數據 66
3.5 學會遞歸地思考 68
3.5.1 什麼是遞歸? 68
3.5.2 學會遞歸地思考 68
3.5.3 遞歸定義的數據結構 70
3.6 總結 73
第4章 模組化且可重用的
代碼 75
4.1 方法鏈與函式管道的
比較 76
4.1.1 方法連結 77
4.1.2 函式的管道化 78
4.2 管道函式的兼容條件 78
4.2.1 函式的類型兼容條件 78
4.2.2 函式與元數:元組的
套用 79
4.3 柯里化的函式求值 82
4.3.1 仿真函式工廠 85
4.3.2 創建可重用的函式模板 86
4.4 部分套用和函式綁定 87
4.4.1 核心語言擴展 89
4.4.2 延遲函式綁定 89
4.5 組合函式管道 90
4.5.1 HTML部件的組合 91
4.5.2 函式組合:描述與求值
分離 92
4.5.3 函式式庫的組合 95
4.5.4 應對純的代碼和不純的
代碼 96
4.5.5 point-free編程 98
4.6 使用函式組合子來管理
程式的控制流 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 總結 102
第5章 針對複雜套用的設計
模式 103
5.1 命令式錯誤處理的
不足 104
5.1.1 用try-catch處理錯誤 104
5.1.2 函式式程式不應拋出
異常 105
5.1.3 空值(null)檢查問題 106
5.2 一種更好的解決方案
——Functor 106
5.2.1 包裹不安全的值 107
5.2.2 Functor定義 108
5.3 使用Monad函式式地處理錯誤 111
5.3.1 Monad:從控制流到
數據流 111
5.3.2 使用Maybe Monad和Either Monad來處理異常 115
5.3.3 使用IO Monad與外部資源互動 123
5.4 Monadic鏈式調用及
組合 126
5.5 總結 131
第三部分 函式式技能提升
第6章 堅不可摧的代碼 135
6.1 函式式編程對單元測試的影響 136
6.2 測試命令式代碼的
困難 137
6.2.1 難以識別和分解任務 137
6.2.2 對共享資源的依賴會導致結果不一致 138
6.2.3 按預定義順序執行 139
6.3 測試函式式代碼 140
6.3.1 把函式當作黑盒子 140
6.3.2 專注於業務邏輯,而不是控制流 141
6.3.3 使用Monadic式從不純的代碼中分離出純函式 142
6.3.4 mock外部依賴 144
6.4 通過屬性測試製定規格
說明 146
6.5 通過代碼覆蓋率衡量有
效性 152
6.5.1 衡量函式式代碼測試的
有效性 152
6.5.2 衡量函式式代碼的
複雜性 155
6.6 總結 158
第7章 函式式最佳化 159
7.1 函式執行機制 160
7.1.1 柯里化與函式上下文
堆疊 161
7.1.2 遞歸的弱點 164
7.2 使用惰性求值推遲
執行 165
7.2.1 使用函式式組合子避免重複計算 167
7.2.2 利用shortcut fusion 167
7.3 實現需要時調用的
策略 168
7.3.1 理解記憶化 169
7.3.2 記憶化計算密集型
函式 169
7.3.3 有效利用柯里化與
記憶化 172
7.3.4 通過分解來實現更大程度
的記憶化 173
7.3.5 記憶化遞歸調用 173
7.4 遞歸和尾遞歸最佳化 175
7.5 總結 178
第8章 管理異步事件以及
數據 181
8.1 異步代碼的挑戰 182
8.1.1 在函式之間創建時間依賴
關係 182
8.1.2 陷入回調金字塔 183
8.1.3 使用持續傳遞式樣 186
8.2 一等公民Promise 188
8.2.1 連結將來的方法 190
8.2.2 組契約步和異步行為 195
8.3 生成惰性數據 197
8.3.1 生成器與遞歸 199
8.3.2 疊代器協定 200
8.4 使用RxJS進行函式式和回響式編程 202
8.4.1 數據作為Observable
序列 202
8.4.2 函式式編程與回響式
編程 203
8.4.3 RxJS和Promise 205
8.5 總結 206
附錄 本書中使用的
JavaScript庫 207
函式式JavaScript庫 207
使用的其他庫 208

相關詞條

熱門詞條

聯絡我們