本書是為想要快速學(xué)習(xí)或者正在學(xué)習(xí)Scala編程語言的Java開發(fā)者寫的,循序漸進地介紹了Scala編程語言的多個方面。
本書共分為4個部分:第一部分詳細介紹Scala的一些基礎(chǔ)知識,并和Java中的相關(guān)概念進行了參照,方便讀者快速上手Scala;第二部分進一步介紹Scala的一些中級知識,以及與Java的一些差異點,方便讀者編寫出更簡潔的代碼;第三部分介紹在Scala中如何進行并發(fā)編程,并務(wù)實地介紹Akka套件;第四部分通過實戰(zhàn)練習(xí)對前面的知識進行綜合應(yīng)用,并系統(tǒng)地介紹如何與Java進行互操作。此外,附錄部分還包括一些額外指引。
本書的目標(biāo)讀者是對JVM平臺上的語言以及函數(shù)式編程感興趣的程序員。閱讀本書不需要讀者熟悉Scala編程語言,但需要讀者具備Java、面向?qū)ο缶幊痰谋尘爸R。因為本書以一種非常務(wù)實的方式組織內(nèi)容,所以讀者無法學(xué)到Scala的所有內(nèi)容,但是足以應(yīng)付日常工作,如果想要更全面地學(xué)習(xí)Scala以及其背后的一些設(shè)計理念,則最好輔以其他圖書。
IT行業(yè)正擁抱函數(shù)式編程,但面向?qū)ο缶幊探?jīng)驗仍然極富價值。Scala編程語言結(jié)合了面向?qū)ο缶幊毯秃瘮?shù)式編程這兩種編程范式的原力,而本書將展示如何有效地結(jié)合這兩者。
自本書首版出版以來, Scala編程語言已經(jīng)取得了長足的發(fā)展, 這一版在此基礎(chǔ)上也進行了大幅更新。我們修訂了每一章,并添加了3章零6節(jié)的新內(nèi)容來探討Scala 2.12的新特性。讀者將學(xué)到如何使用并發(fā)集合和Akka的Actor來安全地管理并發(fā),使用值類和改進后的隱式轉(zhuǎn)換來創(chuàng)建富有表現(xiàn)力和可讀性的代碼,使用字符串插值來從數(shù)據(jù)構(gòu)建字符串,創(chuàng)建領(lǐng)域特定語言,以及使用尾調(diào)用優(yōu)化來優(yōu)化遞歸。
無論讀者是要創(chuàng)建簡潔、健壯的單線程應(yīng)用程序,還是要編寫非常具有表現(xiàn)力、線程安全的并發(fā)程序,本書都是讀者的良師益友。
作者簡介
文卡特·蘇帕拉馬尼亞姆(Venkat Subramaniam)博士 Agile Developer公司的創(chuàng)始人,同時也在休斯敦大學(xué)兼任教職。他已經(jīng)培訓(xùn)和指導(dǎo)了數(shù)千名軟件開發(fā)者。他也是多本書籍的(合著)作者,其中包括獲得2007年度Jolt“生產(chǎn)力大”(Productivity Award)的《高效程序員的45個習(xí)慣:敏捷開發(fā)修煉之道》一書。
譯者簡介
沈達 挖財大數(shù)據(jù)研發(fā)工程師, Scala 愛好者與實踐者, 專注于大數(shù)據(jù)和分布式系統(tǒng)。業(yè)余時間是GNU TeXmacs的貢獻者。
何品 目前是淘寶的一名知名軟件工程師,熱愛反應(yīng)式編程,同時也是Akka和Netty等項目的貢獻者,活躍于Scala社區(qū)。
目錄
第 一部分 小試牛刀 1
第 1章 探索Scala 3
1.1 Scala的特性 3
1.2 以少勝多 4
1.3 函數(shù)式編程 8
1.4 小結(jié) 11
第 2章 體驗Scala 12
2.1 使用REPL 12
2.2 命令行上的Scala 14
2.3 以獨立腳本方式運行Scala代碼 15
2.3.1 在類Unix系統(tǒng)上以獨立腳本方式運行 15
2.3.2 在Windows上以獨立腳本方式運行 16
2.3.3 Scala的IDE支持 16
2.4 編譯Scala 17
2.5 小結(jié) 17
第3章 從Java到Scala 18
3.1 Scala:簡潔的Java 18
3.1.1 減少樣板代碼 18
3.1.2 更多便利特性 19
3.1.3 轉(zhuǎn)向函數(shù)式風(fēng)格 21
3.2 Java原始類型對應(yīng)的Scala類 21
3.3 元組和多重賦值 22
3.4 靈活的參數(shù)和參數(shù)值 24
3.4.1 傳遞變長參數(shù)值 24
3.4.2 為參數(shù)提供默認值 25
3.4.3 使用命名參數(shù) 26
3.5 隱式參數(shù) 27
3.6 字符串和多行原始字符串 29
3.7 字符串插值 30
3.8 合理的約定 32
3.9 操作符重載 33
3.10 Scala與Java的差異 35
3.10.1 賦值的結(jié)果 36
3.10.2 Scala的== 36
3.10.3 可有可無的分號 37
3.10.4 避免顯式return 38
3.11 默認訪問修飾符 39
3.11.1 定制訪問修飾 39
3.11.2 Scala的protected 40
3.11.3 細粒度的訪問控制 41
3.12 小結(jié) 43
第4章 處理對象 44
4.1 創(chuàng)建并使用類 44
4.1.1 創(chuàng)建實例 44
4.1.2 創(chuàng)建類 45
4.1.3 定義字段、方法和構(gòu)造器 46
4.2 遵循JavaBean慣例 49
4.3 類型別名 50
4.4 擴展一個類 51
4.5 參數(shù)化類型 52
4.6 單例對象和伴生對象 54
4.6.1 單例對象 54
4.6.2 獨立對象和伴生對象 56
4.6.3 Scala中的static 57
4.7 創(chuàng)建枚舉類 59
4.8 包對象 60
4.9 小結(jié) 63
第5章 善用類型 64
5.1 類型推斷 64
5.1.1 簡單類型的類型推斷 64
5.1.2 針對泛型和集合的類型推斷 66
5.2 基礎(chǔ)類型 68
5.2.1 Any類型 68
5.2.2 關(guān)于Nothing 69
5.2.3 Option類型 70
5.2.4 Either類型 71
5.3 返回值類型推斷 73
5.4 參數(shù)化類型的型變 75
5.4.1 協(xié)變和逆變 75
5.4.2 支持協(xié)變 76
5.4.3 支持逆變 77
5.4.4 定制集合的型變 78
5.5 隱式類型轉(zhuǎn)換 78
5.5.1 隱式函數(shù) 79
5.5.2 隱式類 81
5.6 值類 83
5.7 使用隱式轉(zhuǎn)換 86
5.8 小結(jié) 88
第二部分 深入Scala 89
第6章 函數(shù)值和閉包 91
6.1 常規(guī)函數(shù)的局限性 91
6.2 可擴展性與高階函數(shù) 92
6.3 具有多個參數(shù)的函數(shù)值 93
6.4 柯里化 96
6.5 參數(shù)的占位符 97
6.6 參數(shù)路由 98
6.7 復(fù)用函數(shù)值 99
6.8 部分應(yīng)用函數(shù) 101
6.9 閉包 102
6.10 Execute Around Method模式 103
6.11 小結(jié) 106
第7章 特質(zhì) 107
7.1 理解特質(zhì) 107
7.2 選擇性混入 110
7.3 使用特質(zhì)實現(xiàn)裝飾器模式 111
7.4 特質(zhì)中的方法延遲綁定 113
7.5 小結(jié) 115
第8章 集合 116
8.1 常見的Scala集合 116
8.2 使用Set 118
8.3 關(guān)聯(lián)映射 119
8.4 不可變列表 121
8.5 方法名約定 124
8.6 for表達式 126
8.7 小結(jié) 128
第9章 模式匹配和正則表達式 129
9.1 模式匹配綜述 129
9.1.1 匹配字面量和常量 129
9.1.2 匹配通配符 130
9.1.3 匹配元組和列表 131
9.1.4 匹配類型和守衛(wèi) 132
9.2 case表達式中的模式變量和常量 133
9.3 使用case類進行模式匹配 135
9.4 提取器和正則表達式 138
9.4.1 使用提取器進行模式匹配 138
9.4.2 正則表達式 141
9.4.3 正則表達式作為提取器 142
9.5 無處不在的下劃線字符 143
9.6 小結(jié) 144
第 10章 處理異常 145
10.1 Scala中的異常 145
10.2 注意catch的順序 147
10.3 小結(jié) 149
第 11章 遞歸 150
11.1 一個簡單的遞歸 150
11.2 尾調(diào)用優(yōu)化(TCO) 151
11.2.1 常規(guī)遞歸并無優(yōu)化 152
11.2.2 用尾調(diào)用優(yōu)化來拯救 152
11.2.3 確保尾調(diào)用優(yōu)化 154
11.3 蹦床調(diào)用 155
11.4 小結(jié) 158
第三部分 Scala中的并發(fā)編程 159
第 12章 惰性求值和并行集合 161
12.1 釋放惰性 161
12.2 釋放嚴(yán)格集合的惰性 164
12.3 終極惰性流 167
12.4 并行集合 170
12.4.1 從順序集合入手 171
12.4.2 使用并行集合加速 173
12.5 小結(jié) 175
第 13章 使用Actor編程 176
13.1 一個順序耗時問題 176
13.2 曲折的并發(fā)之路 178
13.3 創(chuàng)建Actor 179
13.4 Actor和線程 181
13.5 隔離可變性 182
13.6 使用Actor模型進行并發(fā) 186
13.7 使用建議 189
13.8 小結(jié) 190
第四部分 Scala實戰(zhàn) 191
第 14章 和Java進行互操作 193
14.1 在Scala中使用Scala類 193
14.2 在Scala中使用Java類 195
14.3 在Java中使用Scala方法 197
14.4 在Java中使用特質(zhì) 198
14.5 在Java中使用單例對象和伴生對象 201
14.6 擴展類 203
14.7 小結(jié) 204
第 15章 使用Scala創(chuàng)建應(yīng)用程序 205
15.1 獲取用戶輸入 205
15.2 讀寫文件 206
15.3 XML作為一等公民 207
15.4 讀寫XML 210
15.5 從Web獲取股票價格 213
15.6 編寫并發(fā)的資產(chǎn)凈值應(yīng)用程序 216
15.7 小結(jié) 217
第 16章 單元測試 218
16.1 使用JUnit 218
16.2 使用ScalaTest 220
16.3 使用Mockito 221
16.3.1 函數(shù)式風(fēng)格的測試 221
16.3.2 創(chuàng)建一個Mock 223
16.4 小結(jié) 227
附錄A 安裝Scala 228
參考文獻 230