內容簡介
JavaScript 是近年來非常受矚目的一門編程語言,它既支持麵嚮對象編程,也支持函數式編程。本書專門介紹JavaScript函數式編程的特性。
全書共9章,分彆介紹瞭JavaScript函數式編程、一等函數與Applicative編程、變量的作用域和閉包、高階函數、由函數構建函數、遞歸、純度和不變性以及更改政策、基於流的編程、類編程。除此之外,附錄中還介紹瞭更多函數式JavaScript。
本書內容全麵,示例豐富,適閤想要瞭解函數式編程的JavaScript程序員和學習JavaScript的函數式程序員閱讀。
作者簡介
Michael Fogus是Dynamic Animation Systems的軟件架構師,在分布式仿真、機器視覺和專傢係統建設方麵經驗豐富。他是Clojure、ClojureScript以及Underscore-contrib的貢獻者,還是《Clojure編程樂趣》的作者。
內頁插圖
目錄
第1章 JavaScript函數式編程簡介 1
1.1 JavaScript案例 1
1.2 開始函數式編程 4
1.2.1 為什麼函數式編程很重要 4
1.2.2 以函數為抽象單元 7
1.2.3 封裝和隱藏 9
1.2.4 以函數為行為單位 10
1.2.5 數據抽象 14
1.2.6 函數式JavaScript初試 17
1.2.7 加速 19
1.3 Underscore示例 22
1.4 總結 23
第2章 一等函數與Applicative編程 24
2.1 函數是一等公民 24
2.2 Applicative編程 30
2.2.1 集閤中心編程 31
2.2.2 Applicative編程的其他實例 32
2.2.3 定義幾個Applicative函數 35
2.3 數據思考 36
2.4 總結 43
第3章 變量的作用域和閉包 44
3.1 全局作用域 44
3.2 詞法作用域 46
3.3 動態作用域 47
3.4 函數作用域 51
3.5 閉包 52
3.5.1 模擬閉包 53
3.5.2 使用閉包 57
3.5.3 閉包的抽象 59
3.6 總結 60
第4章 高階函數 62
4.1 以其他函數為參數的函數 62
4.1.1 關於傳遞函數的思考:max、finder和best 63
4.1.2 關於傳遞函數的更多思考:重復、反復和條件迭代
(iterateUntil) 65
4.2 返迴其他函數的函數 67
4.2.1 高階函數捕獲參數 69
4.2.2 捕獲變量的好處 69
4.2.3 防止不存在的函數:fnull 72
4.3 整閤:對象校驗器 74
4.4 總結 77
第5章 由函數構建函數 78
5.1 函數式組閤的精華 78
5.2 柯裏化(Currying) 83
5.2.1 嚮右柯裏化,還是嚮左 84
5.2.2 自動柯裏化參數 85
5.2.3 柯裏化流利的API 88
5.2.4 JavaScript柯裏化的缺點 89
5.3 部分應用 89
5.3.1 部分應用一個和兩個已知的參數 91
5.3.2 部分應用任意數量的參數 92
5.3.3 局部應用實戰:前置條件 93
5.4 通過組閤端至端的拼接函數 96
5.5 總結 98
第6章 遞歸 100
6.1 自吸收(self-absorbed)函數(調用自己的函數) 100
6.1.1 用遞歸遍曆圖 105
6.1.2 深度優先自遞歸搜索 106
6.1.3 遞歸和組閤函數:Conjoin和Disjoin 108
6.2 相互關聯函數(函數調用其他會再調用迴它的函數) 110
6.2.1 使用遞歸深剋隆 111
6.2.2 遍曆嵌套數組 112
6.3 太多遞歸瞭 114
6.3.1 生成器 117
6.3.2 蹦床原理以及迴調 120
6.4 遞歸是一個底層操作 121
6.5 總結 122
第7章 純度、不變性和更改政策 123
7.1 純度 123
7.1.1 純度和測試之間的關係 124
7.1.2 提取純函數 125
7.1.3 測試不純函數的屬性 126
7.1.4 純度與引用透明度的關係 127
7.1.5 純度和冪等性 129
7.2 不變性 130
7.2.1 如果一棵樹倒在樹林裏,有沒有聲音? 132
7.2.2 不變性與遞歸 133
7.2.3 凍結和剋隆 134
7.2.4 在函數級彆上觀察不變性 136
7.2.5 觀察對象的不變性 137
7.2.6 對象往往是一個低級彆的操作 140
7.3 控製變化的政策 141
7.4 總結 144
第8章 基於流的編程 145
8.1 鏈接 145
8.1.1 惰性鏈 148
8.1.2 Promises 152
8.2 管道 154
8.3 數據流與控製流 158
8.3.1 找個一般的形狀 161
8.3.2 函數可以簡化創建action 164
8.4 總結 166
第9章 類編程 167
9.1 數據導嚮 167
9.2 Mixins 173
9.2.1 修改核心原型 175
9.2.2 類層次結構 176
9.2.3 改變層級結構 179
9.2.4 用Mixin扁平化層級結構 180
9.2.5 通過Mixin擴展新的語義 185
9.2.6 通過Mixin混閤齣新的類型 187
9.2.7 方法是低級彆操作 188
9.3 }).call(“Finis”); 190
附錄A 更多函數式JavaScript 191
A.1 JavaScript的函數式庫 191
A.1.1 函數式JavaScript 191
A.1.2 Underscore-contrib 192
A.1.3 RxJS 192
A.1.4 Bilby 194
A.1.5 allong.es 195
A.1.6 其他函數式庫 196
A.2 能編譯成JavaScript的函數式語言 196
A.2.1 ClojureScript 196
A.2.2 CoffeeScript 197
A.2.3 Roy 198
A.2.4 Elm 198
前言/序言
JavaScript函數式編程 下載 mobi epub pdf txt 電子書 格式