|
-- 會員 / 註冊 --
|
|
|
|
Scala編程(第4版) ( 簡體 字) |
作者:高宇翔 | 類別:1. -> 程式設計 -> Scala |
譯者: |
出版社:電子工業出版社 | 3dWoo書號: 53950 詢問書籍請說出此書號!【有庫存】 NT售價: 1045 元 |
出版日:12/1/2020 |
頁數:844 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787121402722 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:譯者序
三年過去了。Scala 變了嗎?在我看來,Scala 還是那個讓人著迷,同時又超級務實的小眾語言。但這并不重要,重要的是你找到了它,而它也找到了你。如果你剛接觸 Scala,請允許我投來羨慕的眼光,因為從來沒有像今天這樣,
有這么多優質的學習資源可供選擇,而 Scala 也一直在穩定地向業界輸出成熟的解決方案和人才。
我還清晰地記得十年前剛上手 Scala,以及三年前引進《Scala 編程》第3版時的內心活動。我的職業生涯,從我接觸 Scala 那一天起,就已注定不同。不怕各位看官笑話,Scala 是我現在公司入職的敲門磚,讓我從企業開發順利
過渡到互聯網行業。Scala 也伴隨我和團隊的成長,貢獻了大量經住了互聯網級別壓力考驗的代碼,其中一些從 6 年前上線到現在,幾乎沒有做過重大修改,還是最初的設計和實現,跑贏了很多曇花一現的技術棧。
說回《Scala 編程》,跟第 3 版相比,第 4 版增補了 Scala 2.13 的內容,Scala 2.13 中最主要的改動,是為了給 Scala 3 打基礎而幾乎重寫的集合框架。這本書的分量,除 Martin Odersky 的親自背書和顯而易見的篇幅之外,我
認為最值得一提的,是它不僅全面覆蓋了 Scala 幾乎所有的語言特性,還從語言開發者的視角,向我們介紹了這些語言特性和設計取舍背后的原因,以及要解決的問題。這是《Scala 編程》跟其他林林總總的 Scala 圖書最大的區別。從工具和工具書的角度來看,你也許會覺得 :編程語言就是拿來干活兒的,一本編程語言的入門書,當然就是要把怎么用講明白,讓我高效地完成手中的工作,其他都是次要的。這里,我想給讀者朋友們分享一個我自己的心得 :語言除了表達(讓計算機和其他人類明白),更是思維的載體。學習一門編程語言,局部功利的因素當然有,但更多的,是通過這門語言,拓寬你的知識邊界。語言是手段,不是目的。所以,不論你是否從事 Scala 編程工作,希望這本書,都能夠帶給你不一樣的世界和認知。
感謝 Martin Odersky 和他的團隊,為我們帶來這樣一門獨特而優美的編程語言 ;感謝電子工業出版社、張春雨編輯,在第 1 版和第 3 版之后,繼續引進本書的第 4 版 ;感謝編輯團隊和其他幕后工作者的辛勤付出 ;感謝家人無條件的支持和鼓勵,我愛你們,你們是我心中的燈塔。
在本書的翻譯過程中,譯者雖已盡力忠實呈現原著的本意,但畢竟能力有限,問題和疏漏恐難以避免,懇請各位讀者批評指正。
——高宇翔 2020 年于上海
序
那是 2004 年的一天,我才剛開始編程的職業生涯沒多久,當我坐下來,選中了這門在當時還沒多少人知道的語言時,我根本無從想象,是怎樣的探索和發現的旅程在等待著我。
最初,使用 Scala 編程給我的感受跟使用其他語言并沒有特別的不同:試錯、實驗然后發現,誤解然后受教。那時,我能獲取的學習資料十分有限:沒有教程,沒有博客,沒有能教我的熟手,當然,更沒有像《Scala 編程》這樣的書可以參考。我有的僅僅是一門語言,各種神奇的新特性,但沒有人能完全肯定怎樣用是合適的。賦能的同時,也讓人無所適從!
我的 Java 程序員背景讓我對 Scala 有所準備,但在日常開發中使用 Scala還是很不一樣。我記得早期的一次印象深刻的 Scala 編程經歷,當時我跟另一個伙伴一起用 Scala 做一個中等規模的項目。項目過程中我決定執行一次重構
操作——我總是能不斷發現新的特性和模式,這已經成了常態——然后就是好幾輪的編譯。每一次編譯器都會向我報告錯誤清單和每個錯誤的行號,而我每次都會找到對應的代碼行,看看是哪里不對,更新代碼修復問題(問題通常都
不會消失,而是換個地方出現)。不過每一步,編譯器都能直接把我引到問題發生的地方。有時候,我會重復上述的步驟,好幾天都沒有一次成功的編譯。不過當編譯錯誤從 100 條逐步減少到 10 條,然后 1 條,然后 0 條——成功編譯——這時我終于能夠跑一跑這個經過大力重構的系統。然而,出人意料的是,它竟然能正常工作。作為一個之前只用過 Java、Perl、BASIC、PHP 和 JavaScript 的年輕程序員,我簡直無法相信這是真的。
時間來到 2015 年,在我組織的首屆 Scala World 大會上,Runar Bjarnason在開場主題演講中提到“約束即解放,自由有束縛”。在這一點上,沒有什么比 Scala 編譯過程更有說服力 :當程序員知道 scalac 會執行一整套約束檢查,
其目的是讓我們免于經歷運行時錯誤——最糟糕的一種錯誤——的痛苦時,會獲得解放。這會讓程序員在哪怕沒有完整的測試套件時,也能充滿信心去實驗和探索,開啟大刀闊斧的改造。
在過去的這些年,我不斷地學習 Scala,直到今天還能發現新的可能性、細微差異和不同特性之間有趣的交集。我不知道還有什么其他語言能像 Scala這樣經過多年還持續讓人陶醉其中。
Scala 即將迎來一次巨變。Scala 的下一個主要版本,Scala 3,其更新幅度將不亞于我 15 年前從 Java 升級到 Scala。日常的 Scala 編程體驗大部分還會繼續保留,但新的語言特性將交叉融合,并深遠地影響 Scala 的方方面面。在本書付印之時,離 Scala 3 被大面積采納還有幾年的時間,Scala 2 在可預見的未來仍是 Scala 事實上的標準版本。
本書所涵蓋的 Scala 2 最新版本,2.13,在標準庫中引入了全新的集合類庫,吸取了大量來自實戰的經驗教訓,以簡化為目標做了重新設計,而上一次這種規模的重構要追溯到 Scala 2.8。新的集合將支持交叉編譯到 Scala 2 和 Scala 3,使用新集合類庫的代碼將無疑為下一個十年打好基礎。當所有人對下一個版本的 Scala 都充滿期待時,不失為入手《Scala 編程》開始學習的良好契機!
——Jon Pretty 2019 年 9 月 12 日 波蘭 克拉科夫
引言
本書是 Scala 編程語言的教程,由直接參與 Scala 開發的人來編寫。我們的目標是讓讀者通過本書,能夠了解和掌握成為高產的 Scala 程序員需要知道的一切。書中的示例均通過 Scala 2.13.1 編譯。
誰讀本書
本書主要的目標讀者是希望學習如何用 Scala 編程的人。如果你想在你的下一個項目中使用 Scala,那么本書就是為你準備的。除此之外,本書對于那些想要學習新知識從而擴展自己眼界的程序員也同樣有益。比方說,如果你是
Java 程序員,閱讀本書,你將接觸到來自函數式編程領域和高階面向對象領域的許多概念。我們相信,通過學習 Scala,以及 Scala 背后的觀念,你將成為一名更好的程序員。
我們假定你擁有常規的編程知識。盡管 Scala 作為用于入門的編程語言并沒有什么不妥,但是這本書并不適用于(從零開始)學習編程。另一方面,閱讀本書并不要求某項具體的編程語言的知識。我們當中大部分人都是在 Java 平臺上使用 Scala 的,但本書并不假定你了解 Java 本身。不過,我們預期大部分讀者都熟悉 Java,因此我們有時會拿 Scala 跟 Java 做對比,幫助這些讀者理解它們之間的區別。
如何使用本書
由于本書的主旨是教學,因此我們推薦的閱讀順序是從前到后,依次閱讀各章。我們盡可能每次只引入一個主題,同時只用已經介紹過的主題來解釋這個新的主題。因此,如果跳過前面的章節,你也許會遇到某些并不十分理解的
概念。只要按順序閱讀,你會發現掌握 Scala 是循序漸進、順理成章的。如果你看到某個不明白的詞匯,記著查看詞匯表和索引。許多讀者都喜歡快速瀏覽特定的章節,這沒有問題,詞匯表和索引能幫助你隨時找回閱讀的坐標和方位。
當你讀完本書以后,還可以繼續將其當作語言參考。Scala 編程語言有一份正式的語言規范,但語言規范強調的是精確,而不是可讀性。雖然本書不會覆蓋 Scala 的每一個細節,它也足夠全面,應該能夠在你逐漸成為 Scala 編程
能手的過程中,承擔起語言參考書的職責。
如何學習Scala
通讀本書,可以學到很多關于 Scala 的知識。不過,如果你做一些額外的嘗試,則可以學得更快,更徹底。
首先,可以利用好包含在本書中的代碼示例。手動將這些示例錄入,有助于在腦海中逐行過一遍代碼。尤其是錄入過程中嘗試一些變化,會非常有趣,這也能讓你確信自己真的理解了它們背后的工作原理。
其次,時常訪問在線論壇。這樣,你和其他 Scala 愛好者可以互相促進。網上有大量的郵件列表、討論組、聊天室、Wiki 和 Scala 特定主題的訂閱。花些時間,找到滿足你需求的內容,你會在小問題上花更少的時間,有更多的精力投入到更深入、更重要的問題中。
最后,一旦你讀得足夠多,則可以自己啟動一個編程項目。從頭編寫小程序,或者為某個更大的項目開發組件。僅僅閱讀并不會讓你走得更遠。
內容概覽
第 1 章, “一門可伸縮的語言”,主要介紹 Scala 的設計及背后的概念和歷史。
第 2 章,“Scala 入門”,介紹了如何用 Scala 完成一些基礎的編程任務,但并不深入講解它們是如何工作的。本章的目的是讓你可以開始鍵入 Scala 代碼并執行。
第 3 章,“Scala 入門(續)”,展示了更多基本的編程任務,幫助你快速上手 Scala。學習完本章以后,你應該就能用 Scala 完成簡單的腳本型任務了。
第 4 章,“類和對象”,開始深入介紹 Scala,描述其基本的面向對象的組成部分,并指導大家如何編譯并運行 Scala 應用程序。
第 5 章,“基本類型和操作”,介紹了 Scala 基本類型、字面量和支持的操作,(操作符的)優先級和結合性,以及對應的富包裝類。
第 6 章,“函數式對象”,以函數式(即不可變)的分數(rational)為例,更深入地講解 Scala 面向對象的特性。
第 7 章,“內建的控制結構”,展示了如何使用 Scala 內建的控制結構 : if 、while 、 for 、 try 和 match 。
第 8 章,“函數和閉包”,給出了對函數的深入介紹,而函數是函數式編程語言最基本的組成部分。
第 9 章,“控制抽象”,展示了如何通過定義自己的控制抽象來對 Scala 基本的控制結構進行完善和補充。
第 10 章,“組合和繼承”,更進一步探討 Scala 對面向對象編程的支持。本章的主題不像第 4 章那么基礎,但實踐中經常會遇到。
第 11 章,“Scala 的繼承關系”,解釋了 Scala 的繼承關系,并探討了通用方法和底類型等概念。
第 12 章,“特質”,介紹了 Scala 的混入(mixin)組合機制。本章展示了特質的工作原理,描述了特質的常見用法,并解釋了特質相對于更傳統的多重繼承有哪些改進。
第 13 章,“包和引入”,討論了大規模編程實踐中我們會遇到的問題,包括頂級包、import 語句,以及像 protected 和 private 那樣的訪問控制修飾符。
第 14 章,“斷言和測試”,展示了 Scala 的斷言機制,并介紹了用 Scala 編寫測試的若干工具,特別是 ScalaTest。
第 15 章,“樣例類和模式匹配”,介紹了這組孿生的結構,讓你更好地編寫規則的、開放式的數據結構。樣例類和模式匹配在處理樹形的遞歸數據時非常有用。
第 16 章,“使用列表”,詳細地解釋了列表這個在 Scala 程序中使用最普遍的數據結構。
第 17 章,“使用其他集合類”,展示了如何使用基本的 Scala 集合,如列表、數組、元組、集和映射。
第 18 章,“可變對象”,解釋了可變對象,以及 Scala 用來表示它們的語法。本章以一個具體的離散事件模擬案例分析收尾,展示了實踐中可變對象的適用場景。
第 19 章,“類型參數化”,用具體的示例解釋了第 13 章介紹過的信息隱藏的技巧:為純函數式隊列設計的類。本章接下來對類型參數的型變進行了說明,介紹了類型參數化對于信息隱藏的作用。
第 20 章,“抽象成員”,描述了 Scala 支持的各種抽象成員,不僅是方法可以被聲明為抽象的,字段和類型也可以。
第 21 章,“隱式轉換和隱式參數”,介紹了兩個能夠幫助你從源碼中省去那些枯燥細節的概念,讓編譯器來自動填充或提供。
第 22 章,“實現列表”,描述了 List 類的實現。理解 Scala 列表的工作原理非常重要, List 類的實現也展示了 Scala 若干特性的運用。
第 23 章,“重訪 for 表達式”,展示了 Scala 如何將 for 表達式翻譯成map 、 flatMap 、 filter 和 foreach 。
第 24 章,“深入集合類”,詳細介紹了 Scala 集合類庫。
第 25 章,“Scala 集合架構”,展示了集合類的構造,以及如何構建自制的集合。
第 26 章,“提取器”,展示了如何對任意的類進行模式匹配,而不是局限于使用樣例類(做模式匹配)。
第 27 章,“注解”,展示了如何通過注解使用語言擴展。本章描述了若干標準的注解,并解釋了如何構建自己的注解。
第 28 章,“使用 XML”,解釋了如何用 Scala 處理 XML。本章展示了生成XML、解析 XML 和處理 XML 的常見用法。
第 29 章,“用對象實現模塊化編程”,展示了如何使用 Scala 的對象構建模塊化的系統。
第 30 章,“對象相等性”,指出了編寫 equals 方法時需要考慮的若干問題和需要注意繞開的“坑”。
第 31 章,“結合 Scala 和 Java”,探討了在同一個工程中組合 Scala 和 Java時會遇到的若干問題,并對如何解決這些問題給出了建議。
第 32 章,“Future 和并發編程”,展示了如何使用 Scala 的 Future 類。盡管完全可以在 Scala 中使用 Java 平臺的并發編程原語和類庫,Scala 的 Future可以幫助你避開傳統的“線程和鎖”的并發編程模型里常見的死鎖(deadlock)
和爭用狀況(race condition)。
第 33 章,“組合子解析”,展示了如何用 Scala 的組合子(combinator)解析器(parser)類庫構建解析器。
第 34 章,“GUI 編程”,快速地介紹了可大幅簡化基于 Swing 的 GUI 編程的 Scala 類庫。
第 35 章,“SCells 試算表”,通過展示一個完整的用 Scala 編寫的試算表應用程序,將本書介紹的所有 Scala 特性組裝串聯起來。 |
內容簡介:本書由直接參與 Scala 開發的一線人員編寫,因而對原理的解讀和對應用的把握更加值得信賴。本書面向具有一定編程經驗的開發者,目標是讓讀者能夠全面了解和掌握 Scala 編程語言的核心特性,并能夠深入理解 Scala 這門語言在設計取舍背后的動因。即便是不直接使用Scala 的讀者或非一線編程從業者,也能從本書中學到大量關于函數式和面向對象的編程概念和技巧。 |
目錄:序 .............XXII
致謝 .............XXIV
引言 ............XXVII
第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 構建Rational .......... 94
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對象的方法 .........332
16.9 同時處理多個列表 ........335
16.10 理解Scala的類型推斷算法 ......336
16.11 結語 ...........339
第17章 使用其他集合類 ........341
17.1 序列 ..........341
17.2 集和映射 ...........345
17.3 在可變和不可變集合類之間選擇 ......353
17.4 初始化集合 .........356
17.5 元組 ..........360
17.6 結語 ..........362
第18章 可變對象 ..........363
18.1 什么樣的對象是可變的 .......363
18.2 可被重新賦值的變量和屬性 .......366
18.3 案例分析:離散事件模擬 .......369
18.4 用于描述數字電路的語言 .......370
18.5 Simulation API ..........373
18.6 電路模擬 ...........377
18.7 結語 ..........385
第19章 類型參數化 .........386
19.1 函數式隊列 .........386
19.2 信息隱藏 ...........390
19.3 型變注解 ...........393
19.4 檢查型變注解 .........398
19.5 下界 ..........401
19.6 逆變 ..........403
19.7 對象私有數據 .........406
19.8 上界 ..........408
19.9 結語 ..........411
第20章 抽象成員 ..........412
20.1 抽象成員概覽 .........412
20.2 類型成員 ...........413
20.3 抽象的val ..........414
20.4 抽象的var ..........415
20.5 初始化抽象的val .........416
20.6 抽象類型 ...........424
20.7 路徑依賴類型 .........426
20.8 改良類型 ...........429
20.9 枚舉 ..........430
20.10 案例分析:貨幣 ........432
20.11 結語 ...........442
第21章 隱式轉換和隱式參數 .........443
21.1 隱式轉換 ...........443
21.2 隱式規則 ...........446
21.3 隱式轉換到一個預期的類型 .......449
21.4 轉換接收端 .........451
21.5 隱式參數 ...........455
21.6 上下文界定 .........461
21.7 當有多個轉換可選時 ........464
21.8 調試 ..........466
21.9 結語 ..........468
第22章 實現列表 ..........469
22.1 List類的原理 .........469
22.2 ListBuffer類 ..........475
22.3 List類的實踐 .........477
22.4 外部可見的函數式 ........480
22.5 結語 ..........481
第23章 重訪for表達式.........482
23.1 for表達式 ..........484
23.2 N皇后問題 ..........485
23.3 用for推導式進行查詢 .......488
23.4 用for推導式進行翻譯 .......490
23.5 反過來 ...........495
23.6 泛化for表達式 .........496
23.7 結語 ..........498
第24章 深入集合類 .........499
24.1 可變和不可變集合 ........500
24.2 集合的一致性 .........502
24.3 Iterable特質 .........504
24.4 序列型特質Seq、IndexedSeq和LinearSeq ....511
24.5 集 ............517
24.6 映射 ..........521
24.7 具體的不可變集合類 ........525
24.8 具體的可變集合類 ........534
24.9 數組 ..........540
24.10 字符串 ...........545
24.11 性能特征 .........546
24.12 相等性 ...........548
24.13 視圖 ..........549
24.14 迭代器 ...........554
24.15 從頭創建集合 ..........561
24.16 Java和Scala集合互轉 ........563
24.17 結語 ..........565
第25章 Scala集合架構 .........566
25.1 抽取公共操作 .........566
25.2 集成新的集合 .........575
25.3 結語 ..........600
第26章 提取器 ...........601
26.1 示例:提取電子郵箱地址 .......601
26.2 提取器 ...........603
26.3 提取0或1個變量的模式 ........606
26.4 提取可變長度參數的模式 .......608
26.5 提取器和序列模式 ........610
26.6 提取器和樣例類的對比 .......611
26.7 正則表達式 .........613
26.8 結語 ..........616
第27章 注解 ...........618
27.1 為什么要有注解 ........618
27.2 注解的語法 .........619
27.3 標準注解 ...........621
27.4 結語 ..........625
第28章 使用XML ..........626
28.1 半結構化數據 .........626
28.2 XML概覽 ..........627
28.3 XML字面量 ..........628
28.4 序列化 ...........630
28.5 拆解XML ..........632
28.6 反序列化 ...........634
28.7 加載和保存 .........635
28.8 對XML做模式匹配 .........636
28.9 結語 ..........640
第29章 用對象實現模塊化編程 ........641
29.1 問題描述 ...........642
29.2 食譜應用程序 .........643
29.3 抽象 ..........646
29.4 將模塊拆分成特質 ........650
29.5 運行時鏈接 .........652
29.6 跟蹤模塊實例 .........654
29.7 結語 ..........655
第30章 對象相等性 .........657
30.1 Scala中的相等性 .........657
30.2 編寫相等性方法 ........658
30.3 為參數化類型定義相等性 .......672
30.4 如何編寫equals和hashCode方法 .......676
30.5 結語 ..........680
第31章 結合Scala和Java .........681
31.1 從Java使用Scala .........681
31.2 注解 ..........684
31.3 通配類型 ...........690
31.4 同時編譯Scala和Java ........692
31.5 Java 8集成 .........693
31.6 結語 ..........697
第32章 Future和并發編程 .........698
32.1 天堂里的煩惱 .........699
32.2 異步執行和Try ..........700
32.3 使用Future ..........702
32.4 測試Future ..........717
32.5 結語 ..........720
第33章 組合子解析 .........721
33.1 示例:算術表達式 ........722
33.2 運行你的解析器 ........724
33.3 基本的正則表達式解析器 .......725
33.4 另一個示例:JSON ........726
33.5 解析器輸出 .........729
33.6 實現組合子解析器 ........735
33.7 字符串字面量和正則表達式 .......744
33.8 詞法分析和解析 ........745
33.9 錯誤報告 ...........746
33.10 回溯和LL(1) ..........748
33.11 結語 ...........749
第34章 GUI編程 ...........752
34.1 第一個Swing應用程序 ........752
34.2 面板和布局 .........755
34.3 處理事件 ...........757
34.4 示例:攝氏/華氏轉換器 .......760
34.5 結語 ..........762
第35章 SCells試算表 .........764
35.1 可視化框架 .........764
35.2 將數據錄入和顯示分開 .......767
35.3 公式 ..........770
35.4 解析公式 ...........772
35.5 求值 ..........777
35.6 操作類庫 ...........780
35.7 變更通知 ...........783
35.8 結語 ..........787
附錄 Unix和Windows環境的Scala腳本 .......789
術語表 ...........790
關于作者 ............810 |
序: |
|