內容提要
《Scala編程(第3版)》由直接參與Scala開發的一線人員編寫,因而對原理的解讀和套用的把握更加值得信賴。《Scala編程(第3版)》面向具有一定編程經驗的開發者,目標是讓讀者能夠全面了解和掌握Scala程式語言的核心特性,並能夠深入理解Scala這門語言在設計取捨背後的動因。即便是不直接使用Scala或從事一線編程工作的讀者,也能從《Scala編程(第3版)》學到大量關於函式式和面向對象的編程概念和技巧。
目錄
序.XXIV
致謝.XXVI
引言.XXIX
第1章 一門可伸縮的語言.1
1.1 一門按需伸縮的語言2
1.2 是什麼讓Scala能屈能伸? 7
1.3 為什麼要用Scala?.11
1.4 Scala尋根 17
1.5 結語19
第2章 Scala入門20
第1步 使用Scala解釋器21
第2步 定義變數22
第3步 定義函式24
第4步 編寫Scala腳本 26
第5步 用while做循環;用if做判斷 27
第6步 用foreach和for遍歷30
結語32
第3章 Scala入門(續).33
第7步 用類型參數化數組33
第8步 使用列表38
第9步 使用元組42
第10步使用集和映射43
第11步 識別函式式編程風格 48
第12步 從檔案讀取文本行 51
結語55
第4章 類和對象.56
4.1 類、欄位和方法56
4.2 分號推斷61
4.3 單例對象62
4.4 Scala應用程式65
4.5 App特質68
4.6 結語68
第5章 基礎類型和操作69
5.1 一些基礎類型69
5.2 字面量70
5.3 字元串插值 77
5.4 操作符即方法78
5.5 算術操作81
5.6 關係和邏輯操作83
5.7 位運算操作 85
5.8 對象相等性 86
5.9 操作符優先權和結合性88
5.10 富包裝類91
5.11 結語91
第6章 函式式對象.93
6.1 Rational類的規格定義93
6.2 構建Rational94
6.3 重新實現toString方法96
6.4 檢查前置條件97
6.5 添加欄位98
6.6 自引用.100
6.7 輔助構造方法.101
6.8 私有欄位和方法.102
6.9 定義操作符104
6.10 Scala中的標識符.106
6.11 方法重載.108
6.12 隱式轉換.111
6.13 注意事項.112
6.14 結語112
第7章 內建的控制結構114
7.1 if表達式.115
7.2 while循環116
7.3 for表達式119
7.4 用try表達式實現異常處理125
7.5 match表達式129
7.6 沒有break和continue的日子.131
7.7 變數作用域134
7.8 對指令式代碼進行重構.137
7.9 結語.139
第8章 函式和閉包140
8.1 方法.140
8.2 局部函式142
8.3 一等函式144
8.4 函式字面量的簡寫形式.147
8.5 占位符語法147
8.6 部分套用的函式.149
8.7 閉包.152
8.8 特殊的函式調用形式156
8.9 尾遞歸.159
8.10 結語163
第9章 控制抽象164
9.1 減少代碼重複.164
9.2 簡化調用方代碼.169
9.3 柯里化.170
9.4 編寫新的控制結構173
9.5 傳名參數176
9.6 結語.178
第10章 組合和繼承179
10.1 一個二維的布局類庫179
10.2 抽象類180
10.3 定義無參方法182
10.4 擴展類184
10.5 重寫方法和欄位186
10.6 定義參數化欄位188
10.7 調用超類構造方法.189
10.8 使用override修飾符190
10.9 多態和動態綁定192
10.10 聲明final成員.195
10.11 使用組合和繼承196
10.12 實現above、beside和toString.198
10.13 定義工廠對象.201
10.14 增高和增寬.204
10.15 放在一起206
10.16 結語207
第11章 Scala的繼承關係208
11.1 Scala的類繼承關係208
11.2 基本類型的實現機制212
11.3 底類型(bottom types).215
11.4 定義自己的值類型.216
11.5 結語219
第12章 特質.220
12.1 特質如何工作220
12.2 瘦接口和富接口224
12.3 示例:矩形對象225
12.4 Ordered特質227
12.5 作為可疊加修改的特質229
12.6 為什麼不用多重繼承?234
12.7 要特質還是不要特質?238
12.8 結語238
第13章 包和引入240
13.1 將代碼放進包里240
13.2 對相關代碼的精簡訪問242
13.3 引入246
13.4 隱式引入.249
13.5 訪問修飾符250
13.6 包對象256
13.7 結語257
第14章 斷言和測試258
14.1 斷言258
14.2 用Scala寫測試260
14.3 翔實的失敗報告262
14.4 作為規格說明的測試263
14.5 基於性質的測試267
14.6 組織和運行測試268
14.7 結語270
第15章 樣例類和模式匹配.271
15.1 一個簡單的例子271
15.2 模式的種類276
15.3 模式守衛.286
15.4 模式重疊.287
15.5 密封類289
15.6 Option類型.291
15.7 到處都是模式293
15.8 一個複雜的例子298
15.9 結語306
第16章 使用列表307
16.1 List字面量307
16.2 List類型308
16.3 構建列表.309
16.4 列表的基本操作309
16.5 列表模式.310
16.6 List類的初階方法312
16.7 List類的高階方法324
16.8 List對象的方法333
16.9 同時處理多個列表.335
16.10 理解Scala的類型推斷算法336
16.11 結語.339
第17章 使用其他集合類340
17.1 序列340
17.2 集和映射.344
17.3 在可變和不可變集合類之間選擇352
17.4 初始化集合355
17.5 元組358
17.6 結語361
第18章 可變對象362
18.1 什麼樣的對象是可變的?362
18.2 可被重新賦值的變數和屬性.365
18.3 案例分析:離散事件模擬368
18.4 用於描述數字電路的語言369
18.5 Simulation API.372
18.6 電路模擬.376
18.7 結語384
第19章 類型參數化385
19.1 函式式佇列385
19.2 信息隱藏.389
19.3 型變註解.392
19.4 檢查型變註解397
19.5 下界400
19.6 逆變402
19.7 對象私有數據405
19.8 上界407
19.9 結語410
第20章 抽象成員 411
20.1 抽象成員概覽411
20.2 類型成員.412
20.3 抽象的val413
20.4 抽象的var414
20.5 初始化抽象的val.415
20.6 抽象類型.423
20.7 路徑依賴類型425
20.8 改良類型.428
20.9 枚舉429
20.10 案例分析:貨幣431
20.11 結語.441
第21章 隱式轉換和隱式參數.442
21.1 隱式轉換.442
21.2 隱式規則.445
21.3 隱式轉換到一個預期的類型.448
21.4 轉換接收端450
21.5 隱式參數.454
21.6 上下文界定460
21.7 當有多個轉換可選時463
21.8 調試465
21.9 結語467
第22章 實現列表468
22.1 List類的原理.468
22.2 ListBuffer類475
22.3 List類的實踐.476
22.4 外部可見的函式式.479
22.5 結語480
第23章 重訪for表達式481
23.1 for表達式483
23.2 N皇后問題.484
23.3 用for推導式進行查詢487
23.4 用for推導式進行翻譯489
23.5 反過來494
23.6 泛化for表達式495
23.7 結語497
第24章 深入集合類498
24.1 可變和不可變集合.499
24.2 集合的一致性501
24.3 Traversable特質503
24.4 Iterable特質508
24.5 序列型特質Seq、IndexedSeq和LinearSeq.512
24.6 集517
24.7 映射521
24.8 具體的不可變集合類525
24.9 具體的可變集合類.532
24.10 數組539
24.11 字元串544
24.12 性能特徵545
24.13 相等性547
24.14 視圖548
24.15 疊代器554
24.16 從頭創建集合.561
24.17 Java和Scala集合互轉.563
24.18 結語564
第25章 Scala集合架構565
25.1 集合構建器565
25.2 抽取公共操作567
25.3 集成新的集合572
25.4 結語588
第26章 提取器589
26.1 示例:提取電子信箱地址589
26.2 提取器591
26.3 提取0或1個變數的模式594
26.4 提取可變長度參數的模式596
26.5 提取器和序列模式.598
26.6 提取器和樣例類的對比599
26.7 正則表達式601
26.8 結語604
第27章 註解.606
27.1 為什麼要有註解?.606
27.2 註解的語法607
27.3 標準註解.609
27.4 結語613
第28章 使用XML614
28.1 半結構化數據614
28.2 XML概覽615
28.3 XML字面量616
28.4 序列化618
28.5 拆解XML620
28.6 反序列化.622
28.7 載入和保存623
28.8 對XML做模式匹配624
28.9 結語628
第29章 用對象實現模組化編程.629
29.1 問題描述.630
29.2 食譜應用程式631
29.3 抽象634
29.4 將模組拆分成特質.638
29.5 運行時連結640
29.6 跟蹤模組實例642
29.7 結語643
第30章 對象相等性645
30.1 Scala中的相等性.645
30.2 編寫相等性方法646
30.3 為參數化類型定義相等性660
30.4 如何編寫equals和hashCode方法.664
30.5 結語668
第31章 結合Scala和Java669
31.1 從Java使用Scala.669
31.2 註解672
31.3 通配類型.678
31.4 同時編譯Scala和Java680
31.5 基於Scala 2.12特性的Java 8集成681
31.6 結語685
第32章 Future和並發編程686
32.1 天堂里的煩惱687
32.2 異步執行和Try.688
32.3 使用Future.690
32.4 測試Future.705
32.5 結語708
第33章 組合子解析709
33.1 示例:算術表達式.710
33.2 運行你的解析器712
33.3 基本的正則表達式解析器713
33.4 另一個示例:JSON714
33.5 解析器輸出717
33.6 實現組合子解析器.723
33.7 字元串字面量和正則表達式.732
33.8 詞法分析和解析733
33.9 錯誤報告.734
33.10 回溯和LL(1)736
33.11 結語.737
第34章 GUI編程.740
34.1 第一個Swing應用程式.740
34.2 面板和布局743
34.3 處理事件.745
34.4 示例:攝氏/華氏轉換器.748
34.5 結語750
第35章 SCells試算表752
35.1 可視化框架752
35.2 將數據錄入和顯示分開755
35.3 公式758
35.4 解析公式.760
35.5 求值765
35.6 操作類庫.768
35.7 變更通知.771
35.8 結語775
附錄A Unix和Windows環境的Scala腳本.777
關於作者798