産品特色
編輯推薦
闡述scala核心語法、編程方法與深層原理,內容實用,通俗易學
涵蓋Scala實際開發中的重要知識點,實例豐富,代碼注解詳盡
突齣可操作性,力圖使讀者通過實際操作掌握用Scala進行應用開發
內容簡介
本書以Scala語言的核心語法為主綫,通過大量實例代碼循序漸進地介紹瞭Scala語言的語法特性。第1章介紹Scala語言及開發環境的安裝、IntellijIDEA的使用、Scala語言的交互式命令行。第2~3章重點介紹Scala語言的基礎語法結構。第4章,重點介紹Scala語言重要的數據結構collection(集閤)。第5章,重點介紹Scala語言中麵嚮函數編程的語法特性。第6~8章,重點介紹Scala語言麵嚮對象編程的語法特性。第9章,介紹Scala語言中的模式匹配及原理。第10章,詳細介紹Scala語言的類型係統。第11章,對Scala語言中的隱式轉換及原理進行詳細介紹。第12章,重點介紹Scala中的並發編程。第13章,介紹Java語言與Scala語言間的互操作。
本書還提供瞭所有實例的源代碼與素材文件,供讀者上機練習使用,讀者可從網上下載本書資源文件。
本書適用於Scala語言初學者、愛好者,大數據開發人員,軟件培訓機構以及計算機專業的學生使用。
作者簡介
周誌湖,電子科技大學計算機軟件與理論專業碩士,研究方嚮為機器學習與模式識彆,目前供職於綠城房地産集團信息管理部,擔任平颱架構師、數據開發主管。對傳統數據倉庫、基於Hadoop和Spark的大數據倉庫架構有深入的研究。
牛亞真,中國科學院大學計算機信息處理與檢索方嚮碩士,Hadoop大數據工程師,目前主要從事分布式環境下的數據分析、數據挖掘相關工作。
內頁插圖
目錄
第1章 Scala入門 1
1.1 Scala簡介 2
1.2 Scala開發環境搭建 2
1.2.1 軟件準備 2
1.2.2 JDK的安裝與配置 3
1.2.3 Scala SDK的安裝與配置 5
1.2.4 Intellij IDEA的安裝與配置 6
1.3 Scala Hello World 8
1.3.1 創建Scala Project 8
1.3.2 配置項目代碼目錄結構 9
1.3.3 創建應用程序對象 11
1.3.4 運行代碼 12
1.4 Intellij IDEA常用快捷鍵 13
1.4.1 代碼編輯類常用快捷鍵 13
1.4.2 導航快捷鍵 14
1.4.3 編譯、運行及調試 15
1.4.4 代碼格式化 15
1.5 交互式命令行使用 15
1.5.1 Scala內置交互式命令行 15
1.5.2 Scala Console交互式命令行 17
1.5.3 Scala Worksheet的使用 19
小 結 20
第2章 變量及基本數據類型 21
2.1 變 量 22
2.1.1 變量定義 22
2.1.2 lazy變量 23
2.2 基本數據類型 24
2.2.1 Int類型 24
2.2.2 Float類型 25
2.2.3 Double類型 25
2.2.4 Char類型 25
2.2.5 String類型 26
2.2.6 Boolean類型 27
2.3 基本類型操作 27
2.3.1 算術運算操作 27
2.3.2 關係運算操作 28
2.3.3 邏輯運算操作 28
2.3.4 位運算操作 29
2.3.5 對象比較運算操作 30
2.3.6 字符串運算操作 31
2.4 運算符的優先級 32
2.5 元組類型 33
2.6 符號類型 34
小 結 35
第3章 程序控製結構 36
3.1 if語句 37
3.1.1 if語句 37
3.1.2 if… else…語句 37
3.1.3 if...else if...else…語句 37
3.1.4 if的嵌套使用 38
3.1.5 if錶達式 39
3.2 while 循環語句 39
3.2.1 while語句的使用 39
3.2.2 do while語句的使用 40
3.3 for循環語句 41
3.3.1 基礎for循環 41
3.3.2 有過濾條件的for循環 44
3.3.3 多重for循環 44
3.3.4 作為錶達式的for循環 45
小 結 45
第4章 集 閤 46
4.1 集閤簡介 47
4.2 數 組 49
4.2.1 定長數組 49
4.2.2 變長數組 ArrayBuffer 50
4.2.3 數組的遍曆 52
4.2.4 遍曆生成數組 53
4.2.5 常用函數 53
4.3.6 多維數組 54
4.3 列 錶(List) 55
4.3.1 列錶的創建 55
4.3.2 List常用函數 56
4.3.3 List伴生對象方法 58
4.4 集(Set) 59
4.5 映 射(Map) 61
4.6 隊 列(Queue) 63
4.7 棧(Stack) 64
小 結 66
第5章 函 數 67
5.1 函 數 68
5.2 值 函 數 69
5.2.1 值函數的定義 69
5.2.2 值函數的簡化 71
5.3 高階函數 73
5.3.1 高階函數的定義 73
5.3.2 高階函數的使用 74
5.4 閉 包 78
5.5 函數柯裏化 80
5.6 部分應用函數 81
5.7 偏 函 數 83
小 結 85
第6章 Scala麵嚮對象編程(上) 86
6.1 類與對象 87
6.1.1 類的定義 87
6.1.2 創建對象 88
6.1.3 類成員的訪問 88
6.1.4 單例對象 90
6.1.5 應用程序對象 91
6.1.6 伴生對象與伴生類 93
6.2 主構造函數 96
6.2.1 主構造函數的定義 96
6.2.2 默認參數的主構造函數 98
6.2.3 私有主構造函數 99
6.3 輔助構造函數 100
6.3.1 輔助構造函數的定義 100
6.3.2 輔助構造函數中的默認參數 102
6.4 繼承與多態 104
6.4.1 類的繼承 104
6.4.2 構造函數執行順序 107
6.4.3 方法重寫 108
6.4.4 多態 109
6.5 成員訪問控製 111
6.5.1 默認訪問控製 112
6.5.2 protected訪問控製 113
6.5.3 private訪問控製 114
6.5.4 private[this]訪問控製 116
6.5.5 主構造函數中的成員訪問控製 121
6.6 抽象類 125
6.6.1 抽象類的定義 125
6.6.2 抽象類的使用 126
6.7 內部類與內部對象 128
6.8 匿名類 130
小 結 131
第7章 Scala麵嚮對象編程(下) 132
7.1 trait簡介 133
7.2 trait 的使用 135
7.2.1 trait的幾種不同用法 135
7.2.2 混入trait的類對象構造 138
7.2.3 提前定義與懶加載 140
7.3 trait與類 144
7.3.1 trait與類的相似點 144
7.3.1 trait與類的不同點 146
7.4 多重繼承問題 147
7.5 自身類型 148
小 結 151
第8章 包(package) 152
8.1 包的定義 153
8.2 包的使用和作用域 155
8.2.1 包的使用 155
8.2.2 包作用域 156
8.3 包 對 象 159
8.4 import高級特性 160
8.4.1 隱式引入 160
8.4.2 引入重命名 160
8.4.3 類隱藏 161
小 結 162
第9章 模式匹配 163
9.1 模式匹配簡介 164
9.2 模式匹配的7大類型 167
9.2.1 常量模式 167
9.2.2 變量模式 167
9.2.3 構造函數模式 169
9.2.4 序列模式 170
9.2.5 元組模式 171
9.2.6 類型模式 172
9.2.7 變量綁定模式 173
9.3 模式匹配原理 174
9.3.1 構造函數模式匹配原理 174
9.3.2 序列模式匹配原理 176
9.4 正則錶達式與模式匹配 177
9.4.1 Scala正則錶達式 177
9.4.2 正則錶達式在模式匹配中的應用 180
9.5 for循環中的模式匹配 183
9.6 模式匹配與樣例類、樣例對象 185
9.6.1 模式匹配與樣例類 185
9.6.2 模式匹配與樣例對象 187
小 結 190
第10章 隱式轉換 191
10.1 隱式轉換簡介 192
10.2 隱式轉換函數 193
10.2.1 隱式轉換函數的定義 193
10.2.2 隱式轉換函數名稱 194
10.3 隱式類與隱式對象 195
10.3.1 隱式類 195
10.3.2 隱式對象 196
10.4 隱式參數與隱式值 197
10.4.1 隱式參數 197
10.4.2 隱式值 199
10.4.3 隱式參數使用常見問題 201
10.5 隱式轉換規則與問題 204
10.5.1 隱式轉換的若乾規則 204
10.5.2 隱式轉換需注意的問題 208
小 結 210
第11章 類型參數 211
11.1 類與類型 212
11.2 泛 型 214
11.2.1 泛型類 215
11.2.2 泛型接口與泛型方法 216
11.2.3 類型通配符 217
11.3 類型變量界定 220
11.4 視圖界定 222
11.5 上下文界定 223
11.6 多重界定 226
11.7 協變與逆變 227
11.8 高級類型 230
11.8.1 單例類型 231
11.8.2 類型投影 235
11.8.3 類型彆名 237
11.8.4 抽象類型 238
11.8.5 復閤類型 240
11.8.6 函數類型 241
小 結 243
第12章 Scala並發編程基礎 244
12.1 Scala並發編程簡介 245
12.1.1 重要概念 245
12.1.2 Actor模型 247
12.1.3 Akka並發編程框架 247
12.2 Actor 249
12.2.1 定義Actor 249
12.2.2 創建Actor 250
12.2.3 消息處理 255
12.2.4 Actor的其他常用方法 260
12.2.5 停止Actor 261
12.3 Typed Actor 265
12.3.1 Typed Actor定義 265
12.3.2 創建Typed Actor 266
12.3.3 消息發送 267
12.3.4 停止運行Typed Actor 269
12.4 Dispatcher 271
12.4.1 常用Dispatcher 271
12.4.2 ExecutionService 274
12.5 Router 277
12.6 容 錯 279
12.6.1 Actor的4種容錯機製 279
12.6.2 Supervison 279
小 結 285
第13章 Scala與Java的互操作 286
13.1 Java與Scala集閤互操作 287
13.1.1 Java調用Scala集閤 287
13.1.2 Scala調用Java集閤 288
13.1.3 Scala與Java集閤間相互轉換分析 289
13.2 Scala與Java泛型互操作 290
13.2.1 Scala中使用Java泛型 291
13.2.2 Java中使用Scala泛型 291
13.3 Scala trait在Java中的使用 293
13.4 Scala與Java異常處理互操作 298
小 結 299
參考文獻 300
前言/序言
為什麼要寫這本書
Apache Spark、Apache Kafka等基於Scala語言實現的框架在大數據生態圈內占有舉足輕重的地位,它們一定程度上引領著大數據最前沿的技術方嚮,另外Akka、Apache Gearpump等基於Scala語言實現的框架在大數據生態圈內也備受關注,工業實踐已經證明瞭Scala語言的強大,這使Scala語言近一兩年名聲大噪,進而引起眾多編程語言愛好者及各大公司的親睞,國內外也因此掀起瞭一場學習Scala語言的熱潮。
Scala語言基於JVM平颱,能夠與Java語言進行良好地互操作,它最大的特點是可以將麵嚮對象編程語言與函數式編程語言的特點結閤起來。Scala語言的簡潔性和錶達能力,使得Scala語言與Java語言相比,同樣的功能用Scala實現代碼量要少很多。Scala語言的眾多優點,讓許多業內名傢對其推崇備至,這其中便有Java之父James Gosling和Groovy語言創始人James Strachan。
“If I were to pick a language to use today other than Java, it would be Scala.”[ ](如果現在讓我選擇使用除Java之外的一門語言的話,那一定是Scala)——Java之父James Gosling
“Though my tip though for the long term replacement of javac is Scala. I'm very impressed with it! I can honestly say if someone had shown me the Programming in Scala book by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I'd probably have never created Groovy.”(我認為將來可能替代javac的就是Scala ,它極大地震撼瞭我,老實說如果有人在2003年把Martin Odersky、Lex Spoon和Bill Venners寫的那本《Programming in Scala》書拿給我看瞭的話,那我可能就不會再去發明Groovy語言瞭)[ ]——Groovy(另一種基於JVM平颱的語言)創始人James Strachan。
目前國內Scala方麵教材的短缺一定程度上限製瞭Scala語言在國內的普及,本書試圖彌補這一空白。
本書內容
本書是筆者在Scala學習、工作實踐及培訓過程中的心得體會和係統總結。內容涵蓋Scala語言基礎知識,包括變量的定義、程序控製結構、Scala集閤操作;Scala語言中級知識,包括Scala函數式編程、Scala麵嚮對象編程、Scala模式匹配;Scala語言高級編程知識,包括Scala類型參數、隱式轉換、Scala並發編程、Scala與Java互操作。書中利用大量的具體示例和實際案例來說明Scala語言的應用,既能夠掌握核心語法,又能夠理解其背後的深層次原理。
讀者對象
(1)Spark、Kafka等框架二次開發人員
Spark、Kafka等大數據處理框架目前在穩定性、擴展性方麵雖然已經取得瞭長足的進步,但在實際使用時難免遇到問題,此時需要深入到內核源代碼中分析問題,在理解其架構原理與實現細節的基礎上通過修改內核源代碼來解決問題,這需要開發人員有很強的Scala語言功底。
(2)Spark、Kafka等框架應用開發人員
在學習Spark、Kafka等Scala語言實現的大數據技術框架時,這些框架大多都提供瞭Java、Scala、Python等上層應用API編程接口,但僅僅學會使用其上層API是不夠的,因為上層API抽象程度較高,各框架的底層實現細節、設計原理等對開發人員來說是一個黑匣子,在遇到性能等問題時,開發人員如果對底層實現細節不熟悉的話可能很難進行程序的性能優化。
(3)Spark、Kafka等框架運維工程師
目前Spark、Kafka等大數據處理框架基本上已經成為各大公司大數據解決方案的標配,但基於開源解決方案常常會麵臨一些技術風險,框架本身的問題及實際應用場景的不同可能會遇到很多故障,因此對於這些使用Scala語言實現的框架而言,運維工程師也需要知曉各框架的底層細節,這樣纔能夠迅速定位問題並找到閤適的解決辦法。
(4)從事大數據技術的Java開發人員
Scala語言完全兼容Java語言,Scala語言中大量使用瞭Java語言現有的庫,因此如果你是一個Java大數據開發人員,在此建議學習Scala語言,相信它會給你帶來全新的感受,甚至有拋棄Java的念頭。
(5)大數據技術開源愛好者
Spark、Kafka等是大數據技術框架中的明星,Scala語言已經通過瞭工業界的檢驗,學習Scala語言為學習這些框架的設計原理打下堅實的基礎,為以後參與開源、學習工業界最先進的大數據技術架構的優秀思想打下瞭堅實的基礎。
如何閱讀本書
本書涵蓋三大主要部分:
(1)Scala語言基礎篇,主要介紹Scala語言入門基礎知識、變量的定義、程序控製結構、Scala集閤。
(2)Scala語言中級篇,主要介紹Scala函數式編程、 Scala麵嚮對象編程、Scala模式匹配。
(3)Scala語言高級篇,主要介紹Scala類型參數、隱式轉換、Scala並發編程、Scala與Java互操作。
如果你是一名初學者,請按照書的順序從第一章基礎理論部分開始學習,學習時先認真看書中的代碼示例和說明,然後照著代碼親自動手實踐,這樣可以達到事半功倍的學習效果;如果你是一名Scala資深用戶,你可以自由閱讀各章內容,相信書中部分內容肯定能夠給你帶來一些新的啓發。
資源下載
本書代碼可以從pan.baidu.com/s/1nvyDC1r(注意數字和字母大小寫)下載。如果下載有問題,請電子郵件聯係booksaga@163.com,郵件標題為“Scala開發快速入門-代碼
Scala開發快速入門 下載 mobi epub pdf txt 電子書 格式