Clojure編程實(shí)戰(zhàn)(原書第2版)
定 價:79 元
叢書名:華章程序員書庫華章IT
- 作者:(美)阿米特·拉索爾(Amit Rathore),弗朗西斯·阿維拉(Fr
- 出版時間:2018/10/1
- ISBN:9787111609384
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP312.8JA
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書共11章。第1章簡要介紹了Clojure語言及其三大支柱。第2章介紹REPL。第3章介紹Clojure更獨(dú)特的特性,包括元數(shù)據(jù)、異常處理、高階函數(shù)、兩組作用域規(guī)則(詞法和動態(tài))、組織代碼的命名空間等。第4章討論三種基本的多態(tài)性和使用多重方法時各種多態(tài)性在Clojure中的表現(xiàn)。第5章介紹Clojure與JVM的結(jié)合。第6章解釋Clojure的狀態(tài)管理和并發(fā)方法,以及四種基本的并發(fā)原語。第7章介紹Clojure的宏系統(tǒng)。第8章深入介紹函數(shù)式編程范式,以及第3章中所涉及的高階函數(shù)的使用方法。第9章討論表達(dá)問題。第10章說明如何將編寫測試驅(qū)動代碼的過程與第2章中介紹的ClojureREPL相結(jié)合,從而顯著提升效率。第11章介紹高級宏和DSL。
Clojure是用于JVM的一種現(xiàn)代化Lisp語言,具有你所期待的優(yōu)勢:*類函數(shù)、宏、清晰的Lisp編程風(fēng)格。它支持函數(shù)式編程,對并發(fā)編程和創(chuàng)建領(lǐng)域特定語言來說非常理想。Clojure可以解決更困難的問題,做出更快的更改,終得到更小的代碼庫。因此,Clojure有許多成功案例是毫不奇怪的。
本書第2版做了大量修訂和更新,涵蓋Clojure 1.6的新特性。本書從抽象的理論到實(shí)際案例,對Clojure語言進(jìn)行了全面、系統(tǒng)闡釋。首先,你將了解Clojure作為通用語言的使用方法。接著,你將探索Clojure高效的并發(fā)模型,這種模型基于軟件事務(wù)內(nèi)存(STM)的數(shù)據(jù)庫概念。通過在JVM上運(yùn)行的Clojure DSL,效率將提高到一個新的水平。在閱讀本書的過程中,你還將學(xué)習(xí)編寫更小、更安全、更快速代碼的無數(shù)技巧和技術(shù)。
阿米特·拉索爾(Amit Rathore)有12年構(gòu)建大規(guī)模、數(shù)據(jù)密集型應(yīng)用的開發(fā)經(jīng)驗(yàn),目前正在為一個高分布式、高負(fù)載、實(shí)時的大數(shù)據(jù)系統(tǒng)開發(fā)Clojure代碼。
弗朗西斯·阿維拉(Francis Avila) Breeze的軟件開發(fā)工程師,有7年Web前端和后端開發(fā)經(jīng)驗(yàn)。
譯者序
第1版贊譽(yù)
第2版序言
第1版序言
關(guān)于本書
致謝
第1章 Clojure簡介1
1.1 Clojure的概念以及采用的原因1
1.1.1 Clojure:現(xiàn)代化的Lisp語言2
1.1.2 Clojure:務(wù)實(shí)的函數(shù)式編程3
1.1.3 JVM之上的Clojure5
1.2 語言基礎(chǔ)知識6
1.2.1 Lisp語法6
1.2.2 括號8
1.3 宿主互操作性:JVM速成教程9
1.3.1 Java類型、類和對象10
1.3.2 點(diǎn)(.)和new運(yùn)算符11
1.3.3 線程和并發(fā)性12
1.4 小結(jié)12
第2章 Clojure要素:數(shù)據(jù)結(jié)構(gòu)和函數(shù)14
2.1 在REPL上編碼14
2.1.1 Clojure REPL15
2.1.2 “Hello, world!”16
2.1.3 用doc、find-doc和apropos查找文檔17
2.1.4 Clojure語法的另外幾個要點(diǎn)19
2.2 Clojure數(shù)據(jù)結(jié)構(gòu)21
2.2.1 nil、真值和假值21
2.2.2 字符和字符串22
2.2.3 Clojure數(shù)值22
2.2.4 符號和關(guān)鍵字23
2.2.5 列表25
2.2.6 向量26
2.2.7 映射28
2.2.8 序列30
2.3 程序結(jié)構(gòu)31
2.3.1 函數(shù)31
2.3.2 let形式32
2.3.3 do的副作用33
2.3.4 讀取器宏34
2.4 程序流程35
2.4.1 條件35
2.4.2 邏輯函數(shù)37
2.4.3 函數(shù)式循環(huán)40
2.4.4 串行宏45
2.5 小結(jié)49
第3章 Clojure構(gòu)件50
3.1 元數(shù)據(jù)51
3.1.1 Java類型提示53
3.1.2 Java原始類型和數(shù)組類型54
3.2 Java異常:try和throw55
3.3 函數(shù)56
3.3.1 定義函數(shù)57
3.3.2 調(diào)用函數(shù)63
3.3.3 高階函數(shù)64
3.3.4 編寫高階函數(shù)67
3.3.5 匿名函數(shù)69
3.3.6 關(guān)鍵字和符號70
3.4 作用域73
3.4.1 變量和綁定73
3.4.2 重溫let形式78
3.4.3 詞法閉包79
3.5 命名空間79
3.5.1 ns宏80
3.5.2 使用命名空間82
3.6 解構(gòu)83
3.6.1 向量綁定84
3.6.2 映射綁定85
3.7 讀取器字面量87
3.8 小結(jié)89
第4章 多重方法多態(tài)90
4.1 多態(tài)及其類型90
4.1.1 參數(shù)化多態(tài)91
4.1.2 隨意多態(tài)91
4.1.3 子類多態(tài)93
4.2 用多重方法實(shí)現(xiàn)多態(tài)94
4.2.1 不使用多重方法時的情況94
4.2.2 使用多重方法實(shí)現(xiàn)隨意多態(tài)95
4.2.3 多分派98
4.2.4 使用多重方法實(shí)現(xiàn)子類多態(tài)99
4.3 小結(jié)105
第5章 探索Clojure和Java互操作106
5.1 從Clojure中調(diào)用Java107
5.1.1 將Java類導(dǎo)入Clojure107
5.1.2 創(chuàng)建實(shí)例108
5.1.3 訪問方法和域108
5.1.4 宏和句點(diǎn)特殊形式109
5.1.5 有助于使用Java的Clojure宏112
5.1.6 實(shí)現(xiàn)接口和擴(kuò)展類114
5.2 將Clojure代碼編譯為Java字節(jié)碼115
5.2.1 示例:兩個計(jì)算器的故事116
5.2.2 用gen-class和gen-interface創(chuàng)建Java類和接口118
5.3 從Java調(diào)用Clojure122
5.4 小結(jié)123
第6章 狀態(tài)和并發(fā)的世界124
6.1 狀態(tài)存在的問題125
6.1.1 共享狀態(tài)的常見問題125
6.1.2 傳統(tǒng)解決方案125
6.2 標(biāo)識與值的分離127
6.2.1 不可變值128
6.2.2 對象和時間129
6.2.3 不可變性和并發(fā)性130
6.3 Clojure的方法130
6.3.1 不可變性與性能131
6.3.2 托管引用132
6.4 引用132
6.4.1 創(chuàng)建引用132
6.4.2 引用突變133
6.4.3 軟件事務(wù)內(nèi)存135
6.5 代理137
6.5.1 創(chuàng)建代理137
6.5.2 代理突變137
6.5.3 使用代理139
6.5.4 STM事務(wù)中的副作用141
6.6 原子141
6.6.1 創(chuàng)建原子142
6.6.2 原子突變142
6.7 變量143
6.7.1 創(chuàng)建變量和根綁定143
6.7.2 變量綁定144
6.8 狀態(tài)及其統(tǒng)一訪問模型145
6.8.1 創(chuàng)建145
6.8.2 讀取145
6.8.3 突變145
6.8.4 事務(wù)146
6.8.5 監(jiān)視突變146
6.9 決定使用哪種托管引用類別147
6.10 future和promise148
6.10.1 future148
6.10.2 promise149
6.11 小結(jié)150
第7章 通過宏發(fā)展Clojure151
7.1 宏的基礎(chǔ)知識152
7.1.1 文本替換152
7.1.2 unless示例153
7.1.3 宏模板156
7.1.4 回顧:為什么使用宏160
7.2 Clojure內(nèi)部的宏161
7.2.1 comment161
7.2.2 declare161
7.2.3 defonce162
7.2.4 and162
7.2.5 time163
7.3 編寫自己的宏163
7.3.1 infix164
7.3.2 randomly164
7.3.3 defwebmethod165
7.3.4 defnn166
7.3.5 assert-true167
7.4 小結(jié)169
第8章 函數(shù)式編程深入研究170
8.1 使用高階函數(shù)170
8.1.1 收集函數(shù)結(jié)果171
8.1.2 對一系列事物進(jìn)行歸納173
8.1.3 過濾一系列事物174
8.2 部分應(yīng)用175
8.2.1 函數(shù)適配176
8.2.2 定義函數(shù)179
8.3 閉包180
8.3.1 自由變量與閉包180
8.3.2 延遲計(jì)算與閉包181
8.3.3 閉包與對象182
8.3.4 一個Clojure對象系統(tǒng)184
8.4 小結(jié)196
第9章 協(xié)議、記錄和類型197
9.1 表達(dá)式問題197
9.1.1 建立示例場景198
9.1.2 對表達(dá)式問題的仔細(xì)觀察和一些潛在的解決方案201
9.1.3 Clojure多重方法解決方案202
9.2 研究表達(dá)式問題的運(yùn)算端204
9.2.1 def-modus-operandi204
9.2.2 detail-modus-operandi205
9.2.3 跟蹤你的操作方法205
9.2.4 解決方案的錯誤處理和故障點(diǎn)211
9.3 用協(xié)議研究表達(dá)式問題的數(shù)據(jù)類型方面211
9.3.1 defprotocol與extend-protocol212
9.3.2 用defrecord、deftype和reify定義數(shù)據(jù)類型217
9.4 小結(jié)222
第10章 測試驅(qū)動開發(fā)及其他223