Scala 編程, 5/e (Programming in Scala 5/e)
內容描述
本書由直接參與 Scala 開發的一線人員編寫,深入介紹了 Scala 這門結合面向對象和函數式的編程語言的核心特性和設計取捨。繼第 4 版後,時隔一年,本書迎來重大更新,內容覆蓋 Scala 3.0,對新的縮進語法、並集類型、交集類型、枚舉、代數數據類型、上下文參數、特質參數、擴展方法、類型族等都有詳細介紹。本書適合有一定編程經驗的開發者閱讀,尤其是對 Scala 3.0 新特性感興趣的開發者朋友。即便是不直接使用 Scala 的讀者,也能從本書中學到大量關於函數式和麵向對象的編程概念和技巧。
目錄大綱
序XIX
引言XXIII
□□章 一門可伸縮的語言1
1.1 一門按需伸縮的語言□
1.□ 是什麼讓Scala能屈能伸6
1.3 為什麼要用Scala 9
1.4 Scala尋根17
1.5 結語19
第□章 Scala入門□0
□□步 使用Scala解釋器□1
第□步 定義□量□□
第3步 定義函數□5
第4步 編寫Scala腳本□7
第5步 用while做循環;用if做判斷□9
第6步 用foreach方法和for-do遍歷31
結語34
第3章 Scala入門(續) 35
第7步 用類型參數化數組35
第8步 使用列表40
第9步 使用元組44
□□0步 使用集和映射45
□□1步 識別函數式編程風格50
□□□步 用map方法和for-yield□換53
結語57
第4章 類和對象58
4.1 類、字段和方法58
4.□ 分號推斷63
4.3 單例對象64
4.4 樣例類67
4.5 Scala應用程序69
4.6 結語71
第5章 基礎類型和操作7□
5.1 一些基礎類型7□
5.□ 字面量73
5.3 字符串插值79
5.4 操作符即方法81
5.5 算術操作84
5.6 關係和邏輯操作85
5.7 位運算操作87
5.8 對象相等性88
5.9 操作符優先級和結合律90
5.10 富包裝類93
5.11 結語94
第6章 函數式對象95
6.1 Rational類的規格定義95
6.□ 構建Rational實例96
6.3 重新實現toString方法98
6.4 檢查前提條件99
6.5 添加字段100
6.6 自引用10□
6.7 輔助構造方法103
6.8 私有字段和方法105
6.9 定義操作符106
6.10 Scala中的標識符108
6.11 方法重載111
6.1□ 擴展方法113
6.13 注意事項114
6.14 結語115
第7章 內建的控制結構116
7.1 if表達式117
7.□ while循環118
7.3 for表達式1□1
7.4 用try表達式實現異常處理1□7
7.5 match表達式131
7.6 沒有break和continue的日子133
7.7 □量作用域135
7.8 對指令式代碼進行重構139
7.9 結語141
第8章 函數和閉包14□
8.1 方法14□
8.□ □部函數143
8.3 一等函數145
8.4 函數字面量的簡寫形式147
8.5 佔位符語法148
8.6 部分應用的函數149
8.7 閉包15□
8.8 特殊的函數調用形式154
8.9 SAM類型158
8.10 尾遞歸159
8.11 結語163
第9章 控制抽象164
9.1 減少代碼重複164
9.□ 簡化調用方代碼168
9.3 柯里化170
9.4 編寫新的控制結構17□
9.5 傳名參數175
9.6 結語178
□□0章 組合和繼承179
10.1 一個二維的布□類庫179
10.□ 抽像類180
10.3 定義無參方法18□
10.4 擴展類184
10.5 重寫方法和字段187
10.6 定義參數化字段188
10.7 調用超類構造方法189
10.8 使用override修飾符191
10.9 多態和動態綁定19□
10.10 聲明final成員195
10.11 使用組合和繼承196
10.1□ 實現above、beside和toString方法198
10.13 定義工廠對象□01
10.14 增高和增寬□04
10.15 放在一起□05
10.16 結語□07
□□1章 特質□08
11.1 特質如何工作□08
11.□ 瘦接口和富接口□11
11.3 作為可疊加修改的特質□14
11.4 為什麼不用多重繼承□18
11.5 特質參數□□3
11.6 結語□□5
□□□章 包、引入和導出□□7
1□.1 將代碼放進包裡□□7
1□.□ 對相關代碼的精簡訪問□□9
1□.3 引入□3□
1□.4 隱式引入□36
1□.5 訪問修飾符□37
1□.6 頂層定義□4□
1□.7 導出□43
1□.8 結語□47
□□3章 樣例類和模式匹配□48
13.1 一個簡單的例子□48
13.□ 模式的種類□53
13.3 模式守衛□64
13.4 模式重疊□65
13.5 密封類□67
13.6 對Option進行模式匹配□69
13.7 到處都是模式□71
13.8 一個複雜的例子□76
13.9 結語□84
□□4章 使用列表□85
14.1 List字面量□85
14.□ List類型□86
14.3 構建列表□87
14.4 列表的基本操作□87
14.5 列表模式□89
14.6 List類的初階方法□91
14.7 List類的高階方法303
14.8 List對象的方法311
14.9 同時處理多個列表313
14.10 理解Scala的類型推斷算法315
14.11 結語319
□□5章 使用其他集合類3□0
15.1 序列3□0
15.□ 集和映射3□4
15.3 在可□和不可□集合之間選擇331
15.4 初始化集合334
15.5 元組337
15.6 結語340
□□6章 可□對象341
16.1 什麼樣的對像是可□的341
16.□ 可被重新賦值的□量和屬性344
16.3 案例分析:離散事件模擬347
16.4 用於描述數字電路的語言348
16.5 模擬API 351
16.6 電路模擬356
16.7 結語363
□□7章 Scala的繼承關係365
17.1 Scala的類繼承關係365
17.□ 基本類型的實現機制369
17.3 底類型371
17.4 定義自己的值類型37□
17.5 交集類型376
17.6 並集類型377
17.7 透明特質380
17.8 結語38□
□□8章 類型參數化383
18.1 函數式隊列383
18.□ 信息隱藏387
18.3 型□註解390
18.4 檢查型□註解396
18.5 下界399
18.6 逆□ 401
18.7 上界404
18.8 結語407
□□9章 枚舉408
19.1 枚舉數據類型408
19.□ 代數數據類型413
19.3 泛化代數數據類型415
19.4 為什麼說ADT是代數數據類型416
19.5 結語4□0
第□0章 抽象成員4□1
□0.1 抽象成員概覽4□1
□0.□ 類型成員4□□
□0.3 抽象的val 4□3
□0.4 抽象的var 4□4
□0.5 初始化抽象的val 4□5
□0.6 抽像類型433
□0.7 路徑依賴類型436
□0.8 改良類型438
□0.9 案例分析:貨幣439
□0.10 結語450
第□1章 上下文參數451
□1.1 上下文參數的工作原理45□
□1.□ 參數化的上下文參數類型456
□1.3 匿名上下文參數461
□1.4 作為類型族的參數化上下文參數463
□1.5 上下文參數的引入466
□1.6 上下文參數的規則468
□1.7 當有多個上下文參數可選時471
□1.8 調試上下文參數473
□1.9 結語475
第□□章 擴展方法476
□□.1 擴展方法的基礎476
□□.□ 泛化的擴展方法479
□□.3 成組的擴展方法481
□□.4 使用類型族484
□□.5 針對上下文參數的擴展方法486
□□.6 Scala如何查找擴展方法491
□□.7 結語49□
第□3章 類型族493
□3.1 為什麼要用類型族493
□3.□ 上下文界定499
□3.3 主方法50□
□3.4 跨界相等性506
□3.5 隱式轉換51□
□3.6 類型族案例分析:JSON序列化515
□3.7 結語5□6
第□4章 深入集合類5□7
□4.1 可□和不可□集合5□8
□4.□ 集合的一致性530
□4.3 Iterable特質53□
□4.4 序列型特質Seq、IndexedSeq和LinearSeq 539
□4.5 集544
□4.6 映射548
□4.7 具體的不可□集合類553
□4.8 具體的可□集合類560
□4.9 數組565
□4.10 字符串570
□4.11 性能特徵571
□4.1□ 相等性573
□4.13 視圖574
□4.14 迭代器579
□4.15 從頭創建集合585
□4.16 Java和Scala集合互轉587
□4.17 結語589
第□5章 斷言和測試590
□5.1 斷言590
□5.□ 用Scala寫測試59□
□5.3 翔實的失敗報告594
□5.4 作為規格說明的測試596
□5.5 基於屬性的測試599
□5.6 組織和運行測試601
□5.7 結語603
術語表604