JavaScript 是近年來(lái)非常受矚目的一門(mén)編程語(yǔ)言,它既支持面向?qū)ο缶幊,也支持函?shù)式編程。本書(shū)專(zhuān)門(mén)介紹JavaScript函數(shù)式編程的特性。
全書(shū)共9章,分別介紹了JavaScript函數(shù)式編程、一等函數(shù)與Applicative編程、變量的作用域和閉包、高階函數(shù)、由函數(shù)構(gòu)建函數(shù)、遞歸、純度和不變 性以及更改政策、基于流的編程、無(wú)類(lèi)編程。除此之外,附錄中還介紹了更多函數(shù)式JavaScript。
本書(shū)內(nèi)容全面,示例豐富,適合想要了解函數(shù)式編程的JavaScript程序員和學(xué)習(xí)JavaScript的函數(shù)式程序員閱讀。
函數(shù)式編程是當(dāng)前程序設(shè)計(jì)語(yǔ)言的發(fā)展趨勢(shì)和熱門(mén)話(huà)題! ”緯(shū)的作者M(jìn)ichael Fogus是Clojure和ClojureScript的核心貢獻(xiàn)者,也是The Joy of Clojure一書(shū)的作者,是世界知名的函數(shù)式編程專(zhuān)家。
Michael Fogus是Dynamic Animation Systems的軟件架構(gòu)師,在分布式仿真、機(jī)器視覺(jué)和專(zhuān)家系統(tǒng)建設(shè)方面經(jīng)驗(yàn)豐富。他是Clojure、ClojureScript以及Underscore-contrib的貢獻(xiàn)者,還是《Clojure編程樂(lè)趣》的作者。
第1章 JavaScript函數(shù)式編程簡(jiǎn)介
1.1 JavaScript案例
1.2 開(kāi)始函數(shù)式編程
1.2.1 為什么函數(shù)式編程很重要
1.2.2 以函數(shù)為抽象單元
1.2.3 封裝和隱藏
1.2.4 以函數(shù)為行為單位
1.2.5 數(shù)據(jù)抽象
1.2.6 函數(shù)式JavaScript初試
1.2.7 加速
1.3 Underscore示例
1.4 總結(jié)
第2章 一等函數(shù)與Applicative編程
2.1 函數(shù)是一等公民
2.2 Applicative編程
2.2.1 集合中心編程
2.2.2 Applicative編程的其他實(shí)例
2.2.3 定義幾個(gè)Applicative函數(shù)
2.3 數(shù)據(jù)思考
2.4 總結(jié)
第3章 變量的作用域和閉包
3.1 全局作用域
3.2 詞法作用域
3.3 動(dòng)態(tài)作用域
3.4 函數(shù)作用域
3.5 閉包
3.5.1 模擬閉包
3.5.2 使用閉包
3.5.3 閉包的抽象
3.6 總結(jié)
第4章 高階函數(shù)
4.1 以其他函數(shù)為參數(shù)的函數(shù)
4.1.1 關(guān)于傳遞函數(shù)的思考:max、finder和best
4.1.2 關(guān)于傳遞函數(shù)的更多思考:重復(fù)、反復(fù)和條件迭代
(iterateUntil)
4.2 返回其他函數(shù)的函數(shù)
4.2.1 高階函數(shù)捕獲參數(shù)
4.2.2 捕獲變量的好處
4.2.3 防止不存在的函數(shù):fnull
4.3 整合:對(duì)象校驗(yàn)器
4.4 總結(jié)
第5章 由函數(shù)構(gòu)建函數(shù)
5.1 函數(shù)式組合的精華
5.2 柯里化(Currying)
5.2.1 向右柯里化,還是向左
5.2.2 自動(dòng)柯里化參數(shù)
5.2.3 柯里化流利的API
5.2.4 JavaScript柯里化的缺點(diǎn)
5.3 部分應(yīng)用
5.3.1 部分應(yīng)用一個(gè)和兩個(gè)已知的參數(shù)
5.3.2 部分應(yīng)用任意數(shù)量的參數(shù)
5.3.3 局部應(yīng)用實(shí)戰(zhàn):前置條件
5.4 通過(guò)組合端至端的拼接函數(shù)
5.5 總結(jié)
第6章 遞歸
6.1 自吸收(self-absorbed)函數(shù)(調(diào)用自己的函數(shù))
6.1.1 用遞歸遍歷圖
6.1.2 深度優(yōu)先自遞歸搜索
6.1.3 遞歸和組合函數(shù):Conjoin和Disjoin
6.2 相互關(guān)聯(lián)函數(shù)(函數(shù)調(diào)用其他會(huì)再調(diào)用回它的函數(shù))
6.2.1 使用遞歸深克隆
6.2.2 遍歷嵌套數(shù)組
6.3 太多遞歸了
6.3.1 生成器
6.3.2 蹦床原理以及回調(diào)
6.4 遞歸是一個(gè)底層操作
6.5 總結(jié)
第7章 純度、不變性和更改政策
7.1 純度
7.1.1 純度和測(cè)試之間的關(guān)系
7.1.2 提取純函數(shù)
7.1.3 測(cè)試不純函數(shù)的屬性
7.1.4 純度與引用透明度的關(guān)系
7.1.5 純度和冪等性
7.2 不變性
7.2.1 如果一棵樹(shù)倒在樹(shù)林里,有沒(méi)有聲音?
7.2.2 不變性與遞歸
7.2.3 凍結(jié)和克隆
7.2.4 在函數(shù)級(jí)別上觀(guān)察不變性
7.2.5 觀(guān)察對(duì)象的不變性
7.2.6 對(duì)象往往是一個(gè)低級(jí)別的操作
7.3 控制變化的政策
7.4 總結(jié)
第8章 基于流的編程
8.1 鏈接
8.1.1 惰性鏈
8.1.2 Promises
8.2 管道
8.3 數(shù)據(jù)流與控制流
8.3.1 找個(gè)一般的形狀
8.3.2 函數(shù)可以簡(jiǎn)化創(chuàng)建action
8.4 總結(jié)
第9章 無(wú)類(lèi)編程
9.1 數(shù)據(jù)導(dǎo)向
9.2 Mixins
9.2.1 修改核心原型
9.2.2 類(lèi)層次結(jié)構(gòu)
9.2.3 改變層級(jí)結(jié)構(gòu)
9.2.4 用Mixin扁平化層級(jí)結(jié)構(gòu)
9.2.5 通過(guò)Mixin擴(kuò)展新的語(yǔ)義
9.2.6 通過(guò)Mixin混合出新的類(lèi)型
9.2.7 方法是低級(jí)別操作
9.3 }).call(“Finis”);
附錄A 更多函數(shù)式JavaScript
A.1 JavaScript的函數(shù)式庫(kù)
A.1.1 函數(shù)式JavaScript
A.1.2 Underscore-contrib
A.1.3 RxJS
A.1.4 Bilby
A.1.5 allong.es
A.1.6 其他函數(shù)式庫(kù)
A.2 能編譯成JavaScript的函數(shù)式語(yǔ)言
A.2.1 ClojureScript
A.2.2 CoffeeScript
A.2.3 Roy
A.2.4 Elm