本書由直接參與Scala開發(fā)的一線人員編寫,因而對原理的解讀和應(yīng)用的把握更加值得信賴。本書面向具有一定編程經(jīng)驗的開發(fā)者,目標(biāo)是讓讀者能夠全面了解和掌握Scala編程語言的核心特性,并能夠深入理解Scala這門語言在設(shè)計取舍背后的動因。即便是不直接使用Scala或從事一線編程工作的讀者,也能從本書學(xué)到大量關(guān)于函數(shù)式和面向?qū)ο蟮木幊谈拍詈图记伞?
《Scala編程(第3版)》是一份Scala編程語言的教程書。書中包含有很多編程例子,這些例子簡便易懂易學(xué),你如果認(rèn)真讀下去此書,本書將以一步一個腳印的方式引導(dǎo)你順利地獲得Scala軟件開發(fā)的能力。通過閱讀此書,你能夠獲得你所需的,并成為一個多產(chǎn)的Scala程序員。本書還可作為一份語言參考書。Scala語言有一個正式的定義,但是語言的定義是以可讀性為代價要求精確性的文檔。盡管本書并未涵蓋Scala的所有細(xì)節(jié),但它在你更好地掌控Scala編程之前,作為一本平易近人的語言參考書已足夠全面。
推薦序
這本書可以說Scala語言里的圣經(jīng)。很高興高宇翔將它的第3版也翻譯為了中文,對于國內(nèi)的Scala愛好者來說真的是一個福音。
回想起七八年前,剛開始學(xué)習(xí)Scala時市場上還沒有一本中文版的書。閱讀英文版《Programming in Scala》的過程還是蠻費力的,即便我當(dāng)時已經(jīng)有很多年的Java編程經(jīng)驗。當(dāng)時函數(shù)式編程的影響還比較弱,主流的編程風(fēng)格還是命令式的(當(dāng)然目前也依然是,但主流的編程語言里也開始越來越多地融入了函數(shù)式的風(fēng)格),函數(shù)式編程里有很多陌生的概念是之前未曾了解過的,閱讀的過
Martin Odersky 是Scala 編程語言的締造者。他是瑞士洛桑理工學(xué)院(EPFL)的教授,同時也是Typesafe, Inc.(已更名為Lightbend)的創(chuàng)始人。他的研究方向是編程語言和系統(tǒng),更具體地說,就是如何將面向?qū)ο蠛秃瘮?shù)式編程風(fēng)格有機地結(jié)合在一起。自2001 年起,他的主要精力集中在設(shè)計、實現(xiàn)和改進Scala 上。在此之前,他作為Java 泛型的合作設(shè)計者參與了Java 編程語言的開發(fā),同時也是當(dāng)前javac 參考實現(xiàn)的作者。他還是ACM 院士。Lex Spoon 是Semmle Ltd. 的一名軟件工程師。他在EPFL 作為博士后圍繞著Scala 開展了兩年的工作。他擁有Georgia Tech 的博士學(xué)位,在那里他的主攻方向是動態(tài)編程語言的靜態(tài)分析。除Scala 外,他還幫助開發(fā)了各類編程語言,包括動態(tài)語言Smalltalk、科學(xué)計算語言X10,以及支撐Semmle 的邏輯編程語言。他和他的夫人一起生活在Atlanta,他們有兩只貓和一只吉娃娃。Bill Venners 是Artima Inc. 的主席,Artima 開發(fā)者網(wǎng)站(ww.artima.com)的發(fā)行人,以及Escalate Software, LLC 的聯(lián)合創(chuàng)始人。他著有《Inside theJava Virtual Machine》,這是一本面向程序員講解Java 平臺架構(gòu)和內(nèi)部實現(xiàn)原理的書。他在《JavaWorld》雜志上的專欄很受歡迎,主題涵蓋Java 內(nèi)部實現(xiàn)、面向?qū)ο蟮脑O(shè)計和Jini。Bill 從Jini 社區(qū)創(chuàng)立之初便十分活躍,領(lǐng)導(dǎo)了Jini 社區(qū)的ServiceUI 項目,其API 成為Jini 服務(wù)事實上的UI 標(biāo)準(zhǔn)。他還是ScalaTest 的主要開發(fā)者和設(shè)計者,一個面向Scala 和Java 開發(fā)者的開源測試工具。
高宇翔,資深軟件開發(fā)工程師和系統(tǒng)架構(gòu)師,同時也是Scala在國內(nèi)的早期布道者和實踐者,曾譯有《快學(xué)Scala(第2版)》、《快學(xué)Scala》(第1版)和《Scala編程》(第1版)等專業(yè)書籍。
序 ........................................................................................................XXIV
致謝 .....................................................................................................XXVI
引言 .....................................................................................................XXIX
第1章 一門可伸縮的語言 ..........................................................................1
1.1 一門按需伸縮的語言 ..................................................................... 2
1.2 是什么讓Scala能屈能伸? ............................................................. 7
1.3 為什么要用Scala? .......................................................................11
1.4 Scala尋根 ..................................................................................... 17
1.5 結(jié)語............................................................................................. 19
第2章 Scala入門 ....................................................................................20
第1步 使用Scala解釋器 ..................................................................... 21
第2步 定義變量................................................................................. 22
第3步 定義函數(shù)................................................................................. 24
第4步 編寫Scala腳本 ......................................................................... 26
第5步 用while做循環(huán);用if做判斷 .................................................... 27
第6步 用foreach和for遍歷 ................................................................. 30
結(jié)語...................................................................................................... 32
第3章 Scala入門(續(xù)) ..........................................................................33
第7步 用類型參數(shù)化數(shù)組.................................................................. 33
第8步 使用列表 ................................................................................. 38
第9步 使用元組 ................................................................................. 42
第10步使用集和映射 ........................................................................... 43
第11步 識別函數(shù)式編程風(fēng)格 ............................................................. 48
第12步 從文件讀取文本行 ................................................................ 51
結(jié)語...................................................................................................... 55
第4章 類和對象 ......................................................................................56
4.1 類、字段和方法........................................................................... 56
4.2 分號推斷...................................................................................... 61
4.3 單例對象...................................................................................... 62
4.4 Scala應(yīng)用程序 ............................................................................. 65
4.5 App特質(zhì) ....................................................................................... 68
4.6 結(jié)語 ............................................................................................. 68
第5章 基礎(chǔ)類型和操作 ............................................................................69
5.1 一些基礎(chǔ)類型 .............................................................................. 69
5.2 字面量.......................................................................................... 70
5.3 字符串插值 .................................................................................. 77
5.4 操作符即方法 .............................................................................. 78
5.5 算術(shù)操作...................................................................................... 81
5.6 關(guān)系和邏輯操作........................................................................... 83
5.7 位運算操作 .................................................................................. 85
5.8 對象相等性 .................................................................................. 86
5.9 操作符優(yōu)先級和結(jié)合性 ............................................................... 88
5.10 富包裝類.................................................................................... 91
5.11 結(jié)語............................................................................................ 91
第6章 函數(shù)式對象 ...................................................................................93
6.1 Rational類的規(guī)格定義 ................................................................. 93
6.2 構(gòu)建Rational ................................................................................ 94
6.3 重新實現(xiàn)toString方法 .................................................................. 96
6.4 檢查前置條件.............................................................................. 97
6.5 添加字段...................................................................................... 98
6.6 自引用.........................................................................................100
6.7 輔助構(gòu)造方法 .............................................................................101
6.8 私有字段和方法..........................................................................102
6.9 定義操作符 .................................................................................104
6.10 Scala中的標(biāo)識符 .......................................................................106
6.11 方法重載 ...................................................................................108
6.12 隱式轉(zhuǎn)換...................................................................................111
6.13 注意事項...................................................................................112
6.14 結(jié)語 ..........................................................................................112
第7章 內(nèi)建的控制結(jié)構(gòu) .......................................................................... 114
7.1 if表達式 ......................................................................................115
7.2 while循環(huán) ....................................................................................116
7.3 for表達式 ....................................................................................119
7.4 用try表達式實現(xiàn)異常處理 ..........................................................125
7.5 match表達式 ...............................................................................129
7.6 沒有break和continue的日子 ........................................................131
7.7 變量作用域.................................................................................134
7.8 對指令式代碼進行重構(gòu) ..............................................................137
7.9 結(jié)語 ............................................................................................139
第8章 函數(shù)和閉包 .................................................................................140
8.1 方法 ............................................................................................140
8.2 局部函數(shù).....................................................................................142
8.3 一等函數(shù).....................................................................................144
8.4 函數(shù)字面量的簡寫形式 ..............................................................147
8.5 占位符語法 .................................................................................147
8.6 部分應(yīng)用的函數(shù)..........................................................................149
8.7 閉包 .................................................................