Scala程式實戰(原書第2版) Scala Cookbook: Recipes for Object-Oriented and Functional Programming

Alexander, Alvin 譯者:陳凱//李國斌//李力//黃新星

相關主題

商品描述

本書是一本涉及Scala 3基礎知識與實際應用的實踐指南。
本書基於Scala 3,不僅詳細介紹了Scala有關的所有基礎知識,包括入門基礎、功能、語言本身、概念、工具、
函式庫、框架、型別、集合、類別、方法、函數式程式設計技術等,也透過實際的程式碼範例展示了Scala 3的語言優勢和特點,
並以問答形式提供了許多解決方案,包含250多個常見的Scala程式設計問題和1000多個基於真實場景的程式碼範例,
涵蓋了使用Scala 3及其流行庫時遇到的常見問題。
本書適合所有的Scala開發人員以及初級類別庫設計師閱讀。

目錄大綱

目錄
前言1
第1章 命令列13
1.1 初識Scala REPL14
1.2 在REPL中使用原始碼和JAR檔17
1.3 初識Ammonite REPL20
1.4 scalac和scala命令23
1.5 反編譯Scala程式碼25
1.6 運行JAR檔28
第2章 字符串31
2.1 字串的相等性判斷34
2.2 多行字串的建立35
2.3 字串的分割37
2.4 字串的變數代入38
2.5 字串輸出的格式化41
2.6 字串的逐字處理44
2.7 字串的模式查找49
2.8 字串的模式替換51
2.9 使用模式匹配提取字串52
2.10 存取字串中的單一字元54
2.11 自訂字串插值器55
2.12 建立隨機字串58
第3章 數值和日期61
3.1 將字串解析為數值64
3.2 數值類型間的轉換66
3.3 覆蓋預設的數值類型69
3.4 和--的替代方案71
3.5 浮點數的比較72
3.6 處理大數值74
3.7 產生隨機數76
3.8 數值和貨幣的格式化78
3.9 建立新的日期和時間實例83
3.10 計算日期的差值85
3.11 日期的格式化86
3.12 將字串解析為日期89
第4章 控制結構92
4.1 for迴圈95
4.2 多重for迴圈98
4.3 for迴圈中的守衛語句100
4.4 集合中的for/yield101
4.5 Scala中的「三元操作符」103
4.6 match表達式104
4.7 case的多條件匹配108
4.8 將match表達式的結果分配給變數109
4.9 存取match表達式的預設值110
4.10 match表達式與模式匹配110
4.11 match表達式與枚舉和範例類別116
4.12 case中的守衛語句118
4.13 match表達式與isInstanceOf120
4.14 match表達式與List122
4.15 用try/catch匹配一個或多個異常125
4.16 try/catch/finally128
4.17 建立自訂控制結構130
第5章 類133
5.1 挑選合適的領域建模工具134
5.2 建立主建構函式140
5.3 控制建構函式字段的可見性143
5.4 定義輔助建構函數146
5.5 定義私有的主建構子148
5.6 建構函數參數的預設值150
5.7 類別繼承時的建構子151
5.8 呼叫父類別的建構子154
5.9 定義equals方法(物件相等性)156
5.10 阻止產生存取方法和修改方法163
5.11 覆蓋預設的存取方法和修改方法166
5.12 將程式碼區塊或函數賦值給惰性欄位168
5.13 設定未初始化的var字段170
5.14 範例類別產生的模板代碼171
5.15 定義範例類別的輔助建構子176
第6章 特質與枚舉178
6.1 特質的介面用法180
6.2 定義特質的抽象欄位182
6.3 特質的抽象類別用法184
6.4 特質的混入用法185
6.5 多特質同名方法處理與super關鍵字187
6.6 限製特質的拓展(僅支援特定類型的子類)191
6.7 限製特質的拓展(僅支援具有特定方法的類型)194
6.8 限製特質的拓展(僅支援特定的類)195
6.9 使用參數化特質196
6.10 特質的構造參數198
6.11特質與模組202
6.12 用枚舉建立命名值的集208
6.13 以枚舉建模ADT210
第7章 對象215
7.1 物件的強制轉換215
7.2 用classOf方法傳遞Class型別217
7.3 用object建立單例物件218
7.4 用伴生物件建立靜態成員219
7.5 用apply方法作為建構子221
7.6 用apply方法實作靜態工廠223
7.7 將特質具體化成對象224
7.8 unapply方法與模式匹配227
第8章 方法230
8.1 控制方法的作用域232
8.2 呼叫父類別或特質的方法236
8.3 呼叫方法時使用參數名稱239
8.4 設定參數的預設值240
8.5 可變參數242
8.6 無括號的方法呼叫243
8.7 聲明異常244
8.8 支援鍊式呼叫風格246
8.9 擴展方法249
第9章 包和導入251
9.1 大括號風格的包裝語法252
9.2 導入一個或多個成員254
9.3 導入並重新命名成員255
9.4 導入時隱藏類別257
9.5 導入靜態成員258
9.6 無所不在的導入語句260
9.7 導入given262
第10章 函數式程式設計265
10.1 使用函數字面量(匿名函數)272
10.2 將函數當作變數傳遞275
10.3 將函數作為方法的參數280
10.4 聲明高階函數282
10.5 使用部分應用函數285
10.6 建立返回函數的方法288
10.7 建立偏函數291
10.8 實作函數式錯誤處理295
10.9 實際案例:在演算法中傳遞函數298
10.10 實際案例:函數式領域建模300
第11章 集合:介紹308
11.1 選擇適當的集合類別314
11.2 集合的表現比較319
11.3 不可變集合與可變變數322
11.4 建立惰性視圖323
第12章 集合:序列類326
12.1 Vector328
12.2 建立並填入List330
12.3 List的新增操作333
12.4 List和ListBuffer的刪除操作335
12.5 使用ListBuffer建立可變列表337
12.6 LazyList338
12.7 ArrayBuffer340
12.8 Array和ArrayBuffer的刪除操作342
12.9 建立並更新數組344
12.10 建立多維數組347
12.11 數組排序350
第13章 集合:常見的序列方法353
13.1選擇合適的集合方法355
13.2 foreach方法362
13.3 迭代器364
13.4 zipWithIndex和zip方法368
13.5 map方法370
13.6 flatten方法373
13.7 filter方法375
13.8 從集合中提取元素序列378
13.9 序列的拆分380
13.10 reduce和fold方法382
13.11 序列的去重387
13.12 序列的合併388
13.13 序列的隨機化391
13.14 集合排序392
13.15 mkString和addString方法397
第14章 集合:映射400
14.1 建立並使用映射400
14.2選擇合適的映射403
14.3 不可變映射的新增、更新和刪除操作406