在後端,函數式語言層出不窮;在前端,函數作為最後邊界的刻板形象也漸漸消弭不再;Scala的Scala.js、Clojure的ClojureScript都試圖同構移向前端,而原生JavaScript也可透過豐富的函數庫,讓前端的函數式程式設計一樣的舒適和優雅。
本書涵蓋大部分函數式程式設計思想,包括JavaScript的函數式支援,Clojure風格的集合、遞迴、函數組合、Macro、模式比對、實用Monads,以及前端的併發程式設計。
適用:想要瞭解函數式程式設計的JavaScript程式設計師,或想學習JavaScript的函數式程式設計師。
作者簡介:
歐陽繼超
Thoughtworks高級諮詢師,活躍開源貢獻者(github.com / jcouyang),熱愛程式設計與寫作。
作者序
函數式程式設計可以說是非常古老的程式設計方式,但是近年來函數式程式設計越來越受到人們的關注。不管是Google力推的Go、學術派的Scala與Haskell,還是Lisp的新語言Clojure,這些新的函數式程式語言都越來越受到人們的關注。
當然不僅是後端函數式程式語言層出不窮,前端也不甘示弱。雖然前端瀏覽器只支援一種語言——JavaScript,但是能支援函數式程式設計的JavaScript函數庫越來越多,例如Functional JavaScript、Underscore、lodash等。不僅如此,還有一些能編譯成JavaScript的語言,能讓前端的函數式程式設計發揮到極致,例如Haskell的PureScript、Scala的Scalajs、Clojure 的ClojureScript。
我上二段都以Clojure結尾,是因為我喜歡把重點留到最後。Clojure獨特於其他語言,它既是一種新的語言、一種函數式程式設計範式的語言,又流淌著古老的血液——Lisp。這是我選擇用Clojure來詮釋函數式程式設計的原因之一。
為什麼我要選JavaScript作為函數式程式設計的目標? Michael Fogus用200多頁向大家展示了不一樣的Functional JavaScript程式設計方式,可惜Fogus作為ClojureScript編譯器的貢獻者,竟然選擇了Underscore作為函數庫,直接導致無法完全展示JavaScript所能達到的函數式程式設計能力。有趣的是,ClojureScript的作者把ClojureScript的不可變(Immutable)資料結構移植到了JavaScript,這徹底將JavaScript的函數式程式設計提升到用其他函數庫都完成不了的新高度。不僅如此,Mozilla的Sweet.js(https://github.com/mozilla/sweet.js)更是完成了另一個突破——JavaScript的macro,它雖然不能算是函數式的概念,但也算是Lisp語言的一項獨門絕技了。
這一切的一切,都讓我忍不住要幫Fogus出一本續集,用JavaScript實現其他函數式程式語言如Clojure甚至是Haskell,讓大家進一步感受用JavaScript這門不完美的語言同樣可以撰寫出優雅的函數式程式,以不一樣的方式思考和解決問題。於是不管你是想轉行JavaScript的Clojure開發者,還是想了解Clojure或函數式程式設計的JavaScript開發者,都可以在此找到一些啟發。
函數式程式設計可以說是非常古老的程式設計方式,但是近年來函數式程式設計越來越受到人們的關注。不管是Google力推的Go、學術派的Scala與Haskell,還是Lisp的新語言Clojure,這些新的函數式程式語言都越來越受到人們的關注。
當然不僅是後端函數式程式語言層出不窮,前端也不甘示弱。雖然前端瀏覽器只支援一種語言——JavaScript,但是能支援函數式程式設計的JavaScript函數庫越來越多,例如Functional JavaScript、Underscore、lodash等。不僅如此,還有一些能編譯成JavaScript的語言,能讓前端的函數式程式設計發揮到極致,例如Haskell...
目錄
序
前言
Chpater 01 函數式JavaScript
1.1 JavaScript也是函數式語言嗎
1.2 作為函數式語言,JavaScript還差些什麼
1.3 Underscore你錯了
1.4 小結
Chpater 02 集合
2.1 集合的使用
2.2 持久性資料結構
2.3 不可變性
2.4 惰性序列
2.5 小結
Chpater 03 遞迴
3.1 不可變性與遞迴
3.2 柯里悖論
3.3 尾遞迴最佳化
3.4 蹦跳樂園(Trampoline)
3.5 小結
Chpater 04 函數組合
4.1 Underscore到底做錯了什麼
4.2 柯里化有什麼用
4.3 Transducer
4.4 組合與管線
4.5 小結
Chpater 05 Macro巨集
5.1 什麼是REPL
5.2 為什麼要語法糖
5.3 Sweet.js
5.4 Infi x Macro和Operator
5.5 小結
Chpater 06 模式比對
6.1 Destructure
6.2 Arity 函數
6.3 Fizz Buzz
6.4 代數資料類型(ADT)
6.5 小結
Chpater 07 Monadic程式設計
7.1 鏈式呼叫
7.2 Monad
7.3 走鋼絲
7.4 Monad在JavaScript中的應用
7.5 Reactive程式設計
7.6 小結
Chpater 08 平行處理程式設計
8.1 什麼是平行處理
8.2 通訊順序處理程序(CSP)
8.3 使用Generator實現CSP
8.4 實戰CSP
8.5 小結
參考資料
序
前言
Chpater 01 函數式JavaScript
1.1 JavaScript也是函數式語言嗎
1.2 作為函數式語言,JavaScript還差些什麼
1.3 Underscore你錯了
1.4 小結
Chpater 02 集合
2.1 集合的使用
2.2 持久性資料結構
2.3 不可變性
2.4 惰性序列
2.5 小結
Chpater 03 遞迴
3.1 不可變性與遞迴
3.2 柯里悖論
3.3 尾遞迴最佳化
3.4 蹦跳樂園(Trampoline)
3.5 小結
Chpater 04 函數組合
4.1 Underscore到底做錯了什麼
4.2 柯里化有什麼用
4.3 Transducer
4.4 組合與管線
4.5 小結
Chpater 05 Macro巨集
5.1 什麼是REPL
5.2 為什麼要語法糖
5.3 Sweet.js
5...
商品資料
出版社:佳魁資訊股份有限公司出版日期:2019-07-25ISBN/ISSN:9789863797647 語言:繁體中文For input string: ""
裝訂方式:平裝頁數:208頁開數:17*23
購物須知
退換貨說明:
會員均享有10天的商品猶豫期(含例假日)。若您欲辦理退換貨,請於取得該商品10日內寄回。
辦理退換貨時,請保持商品全新狀態與完整包裝(商品本身、贈品、贈票、附件、內外包裝、保證書、隨貨文件等)一併寄回。若退回商品無法回復原狀者,可能影響退換貨權利之行使或須負擔部分費用。
訂購本商品前請務必詳閱退換貨原則。