-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Scala編程(第3版)

( 簡體 字)
作者:高宇翔類別:1. -> 程式設計 -> Scala
譯者:
出版社:電子工業出版社Scala編程(第3版) 3dWoo書號: 48054
詢問書籍請說出此書號!

缺書
NT售價: 720

出版日:11/1/2017
頁數:832
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121328428
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

推薦序
  這本書可以說Scala語言里的圣經。很高興高宇翔將它的第3版也翻譯為了中文,對于國內的Scala愛好者來說真的是一個福音。
  回想起七八年前,剛開始學習Scala時市場上還沒有一本中文版的書。閱讀英文版《Programming in Scala》的過程還是蠻費力的,即便我當時已經有很多年的Java編程經驗。當時函數式編程的影響還比較弱,主流的編程風格還是命令式的(當然目前也依然是,但主流的編程語言里也開始越來越多地融入了函數式的風格),函數式編程里有很多陌生的概念是之前未曾了解過的,閱讀的過程磕磕絆絆。
  大概七年前《Scala編程》第1版發行的時候我立即去買了一本,相比英文版閱讀速度有極大的提升。后來我陸陸續續地將這本書讀過很多遍,每次都能有新的收獲。
  這七年來Scala的發展勢頭很猛,語言也在不斷地調整,相比之下第1版的部分內容已經陳舊了,第3版的翻譯讓國內的Scala開發者可以更好地從中攝取知識和經驗,即便你是Scala開發的老手也可以重溫這本經典著作,一定會有新的體會。
  或許對于毫無編程經驗的初學者來說這本書并不適合作為你的第一本入門編程書,因為Scala本身是一門集大成者的語言,它多范式的風格將很多優秀的特性集成到了一起,具備很靈活的正交性。無編程經驗的初學者未必能把握住。但是對于任何有好奇心的程序員來說,我認為它是你書架上必不可少的一本書。三位作者都是大師級人物,里面看似不經意的只言片語仔細體會的話也別有洞天。
  三位大師在書中所說的很多內容,仔細揣摩,你會發現只是冰山一角,背后有更多可以深挖的內容。但這本書的定位也是面向普通的開發人員,大師們也保持得比較克制,不刻意流露一些復雜晦澀的概念,比如本書對流控、for表達式等有極其詳盡的描述,但并不刻意提及Monad這樣的術語,更多讓開發可以去應用和實踐它。大師們對偏理論的東西給出了一些線索,如果我們保持好奇心,可以順著線索去探究編程語言背后龐大的理論體系。
  對于一些語言愛好者,這本書也是一個重要的參考,我記得初次讀完"組合子解析"(Combinator Parse)這一部分內容時非常震撼,居然可以用極其簡短的代碼實現一些非常復雜的解析器工作。對于想要實現自己的DSL來說實在是太輕松了。還有模式匹配部分,這本書也是我見過的講解得最詳細的一本書。還有面向對象設計等方面,原本覺得熟稔于心的東西也有必要重新思考一下。
  總之,這本書值得反復閱讀,帶著好奇與思考,你會體驗到與大師對話的樂趣。
   —— 王宏江   挖財中間件負責人
 
譯者序
  這是一本很多人期待了近7年的書。
  時光拉回到2010年的夏天,那個時候,Scala還是2.7.x的版本,Java還不支持lambda表達式。因為好奇心的驅使,一群不甘寂寞、不怕折騰的程序員,通過各種方式自學并開始實踐Scala編程,慢慢地形成了小圈子。在國內的大小論壇和一些公開的技術會議上,大家也開始陸續聽到關于這門編程語言的介紹和講解。不過,成體系的中文資料非常少。也是在2010年,電子工業出版社引進了由Martin Odersky、Lex Spoon和Bill Venners合著的《Scala編程》中文版權,由黃海旭翻譯,他是國內最早的一批Scala愛好者。同為愛好者的我,非常榮幸,參與了這本《Scala編程》部分章節的翻譯。
  那是一個Scala爆炸式增長的時期,各種開源項目層出不窮(著名的Apache Spark項目就是在這個時候誕生的)。Scala自身的版本迭代演進也很快,關于2.8版本的討論和開發進展非常鼓舞人心。考慮到2.8相比之前的版本有了比較大的改進,作者們為了更好地普及Scala,《Scala編程》原書于2011年初推出了第2版,覆蓋了2.8版本的特性。由于此時中文的《Scala編程》(第1版)剛出版不久,錯過了引入更新的最佳時機,包括我在內的很多愛好者,開始了對這本中文書的更新版本的漫長等待。
  在等待的過程中,我們共同見證了2012年的《快學Scala》、2014年的《深入理解Scala》、2015年的《Scala編程思想》和2016年的《Scala函數式編程》等多本Scala中文圖書的面世。同樣是這幾年,Java 8正式發布,Scala也公布了2.12版本的線路圖,全面擁抱Java 8。2016年5月,《Scala編程》原書第3版正式發售,內容覆蓋2.12版本的新特性。當得知電子工業出版社最終確定引進《Scala編程》(第3版)的中文版權并邀請我翻譯時,我個人非常激動:終于等來了這次更新。當然了,激動之余是忐忑:一方面翻譯需要投入的心力和體力是巨大的;更為重要的是,自己能不能對得起這本書的分量,不要辜負了大家的期望。
  說到這本書的分量,除了篇幅之外,我認為最值得一提的,是它不僅全面覆蓋了Scala幾乎所有的語言特性,還從語言開發者的視角,向我們介紹了這些語言特性和設計取舍背后的原因,以及要解決的問題。這是《Scala編程》跟其他林林總總的Scala圖書最大的區別。從工具和工具書的角度,你也許會覺得:編程語言就是拿來干活兒的,一本編程語言的入門書,當然就是要把怎么用講明白,讓我高效地完成手中的工作,其他都是次要的。這里,我想給讀者朋友們分享一個我自己的心得:語言除了表達外(讓計算機和其他人類明白),更是思維的載體。學習一門編程語言,局部功利的因素當然有,但更多的,是通過這門語言,拓寬你的知識邊界。語言是手段,不是目的。所以,不論你是否從事Scala編程工作,希望這本書,都能夠帶給你不一樣的世界和認知。


  這本書你真是選對了時候!采用Scala的團隊和項目越來越多,我們的社區也在不斷壯大,Scala相關的職位招聘也十分常見。不論你編程是因為興趣還是工作(或兩者皆有),Scala帶給你的愉悅和生產力都難以拒絕。對我而言,編程真正的樂趣來自用簡單、精巧的方案解決有意思的挑戰。Scala的任務不僅讓這件事成為可能,更讓它充滿樂趣。本書將告訴你Scala是如何做到這些的。
  我從Scala 2.5開始接觸這門編程語言,很快就被它的語法和概念的規則一致所吸引。當看到類型參數自己不能有類型參數這樣的不規則情況出現時,我在2006年一次開發者大會上(戰戰兢兢地)走向Martin Odersky,毛遂自薦以實習生的身份參與Scala開發,去掉了這個限制。我的修改最終被采納,Scala從2.7版本開始正式支持類型構造方法的多態(type constructor polymorphism)。從那時起,我參與了其他大部分編譯器模塊的開發。2012年,我從Martin的實驗室讀完博士后,加入了Typesafe的Scala小組。1也差不多是在那個時候,Scala發布了2.10,從實用偏學術的環境“畢業”,成長為適用于企業開發環境的一門強大的編程語言。
  Scala 2.10是Scala發展過程中的拐點,從快節奏的基于學術研究的功能性版本發布,走向關注簡單和加速在企業計算領域的落地。我們將注意力轉到那些不會出現在論文中的問題,比如跨大版本的二進制兼容。為了保持穩定性和不斷改進、完善平臺的熱望之間的平衡,我們正在往一個更小的核心類庫這個方向努力,讓它變得更穩定,同時讓整個Scala平臺繼續進化。為此,我作為Scala技術領導的首個項目,便是在2.11中啟動對Scala標準類庫的模塊化。
  為減少變更頻率,Typesafe還決定將類庫和編譯器重構升級安排在不同的版本。這一版《Scala編程》涵蓋Scala 2.12版本,該版本是一次編譯器升級,支持新的后端以及針對Java 8新特性的優化。為了更好的Java互調用,讓用戶享受到跟Java一樣的來自JVM優化的好處,Scala將函數編譯成跟Java 8一樣的字節碼。Scala的特質現在也同樣編譯成帶有默認方法的Java接口。這兩個編譯器特性減少了之前版本Scala編譯器需要完成的“魔法”,讓我們更加貼近Java平臺的原生表現,同時提升了編譯速度和運行時性能,還讓二進制兼容更加平滑!
  Java 8平臺的這些改進站在Scala的角度非常振奮人心,我們很高興看到Java也踏上了Scala在十多年前引領的潮流。毫無疑問,Scala提供了更好的函數式編程體驗,默認不可變、語句即表達式(在本書里很難找到return語句)、模式匹配、定義處的型變(Java的使用處型變讓子函數的定義非常別扭),等等。這么說吧,函數式編程并不僅僅是支持lambda表達式這樣的漂亮語法而已。
  作為Scala這門編程語言的掌舵人,我們的目標是兼顧核心語言的開發和生態的建設。Scala之所以成功,離不開那些優秀的類庫、出色的IDE和工具,離不開我們社區中那些友好的、樂于助人的成員們。我非常享受我在Scala的第一個十年(作為Scala的實現者),跟來自數不清的領域里的Scala程序員們一起感受快樂和鼓舞。
  我熱愛Scala編程,希望你也一樣。代表Scala社區,歡迎你!
   —— Andriaan Moors San Francisco, CA   2016年1月14日

引言
  本書是Scala編程語言的教程,由直接參與Scala開發的人來編寫。我們的目標是讓讀者通過本書,能夠了解和掌握成為高產的Scala程序員需要知道的一切。書中的示例,除標記為2.12的之外,均能通過Scala 2.11.7編譯,標記為2.12的示例需要Scala 2.12.0-M3(或更高版本)。
誰讀本書
  本書主要的目標讀者是希望學習如何用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或從事一線編程工作的讀者,也能從本書學到大量關于函數式和面向對象的編程概念和技巧。

目錄:

序 ............XXIV
致謝 .............XXVI
引言 .............XXIX
第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對象的方法 .........333
16.9 同時處理多個列表 ........335
16.10 理解Scala的類型推斷算法 ......336
16.11 結語 ...........339
第17章 使用其他集合類........340
17.1 序列 ..........340
17.2 集和映射...........344
17.3 在可變和不可變集合類之間選擇......352
17.4 初始化集合 .........355
17.5 元組 ..........358
17.6 結語 ..........361
第18章 可變對象 ..........362
18.1 什么樣的對象是可變的?.......362
18.2 可被重新賦值的變量和屬性 .......365
18.3 案例分析:離散事件模擬.......368
18.4 用于描述數字電路的語言.......369
18.5 Simulation API ..........372
18.6 電路模擬...........376
18.7 結語 ..........384
第19章 類型參數化.........385
19.1 函數式隊列 .........385
19.2 信息隱藏...........389
19.3 型變注解...........392
19.4 檢查型變注解 .........397
19.5 下界 ..........400
19.6 逆變 ..........402
19.7 對象私有數據 .........405
19.8 上界 ..........407
19.9 結語 ..........410
第20章 抽象成員 .......... 411
20.1 抽象成員概覽 .........411
20.2 類型成員...........412
20.3 抽象的val ..........413
20.4 抽象的var ..........414
20.5 初始化抽象的val .........415
20.6 抽象類型...........423
20.7 路徑依賴類型 .........425
20.8 改良類型...........428
20.9 枚舉 ..........429
20.10 案例分析:貨幣........431
20.11 結語 ...........441
第21章 隱式轉換和隱式參數 .........442
21.1 隱式轉換...........442
21.2 隱式規則...........445
21.3 隱式轉換到一個預期的類型 .......448
21.4 轉換接收端 .........450
21.5 隱式參數...........454
21.6 上下文界定 .........460
21.7 當有多個轉換可選時 ........463
21.8 調試 ..........465
21.9 結語 ..........467
第22章 實現列表 ..........468
22.1 List類的原理 .........468
22.2 ListBuffer類 ..........475
22.3 List類的實踐 .........476
22.4 外部可見的函數式 ........479
22.5 結語 ..........480
第23章 重訪for表達式.........481
23.1 for表達式 ..........483
23.2 N皇后問題 ..........484
23.3 用for推導式進行查詢 .......487
23.4 用for推導式進行翻譯 .......489
23.5 反過來...........494
23.6 泛化for表達式 .........495
23.7 結語 ..........497
第24章 深入集合類.........498
24.1 可變和不可變集合 ........499
24.2 集合的一致性 .........501
24.3 Traversable特質 ........503
24.4 Iterable特質 .........508
24.5 序列型特質Seq、IndexedSeq和LinearSeq ....512
24.6 集 ............517
24.7 映射 ..........521
24.8 具體的不可變集合類 ........525
24.9 具體的可變集合類 ........532
24.10 數組 ..........539
24.11 字符串 ...........544
24.12 性能特征 .........545
24.13 相等性 ...........547
24.14 視圖 ..........548
24.15 迭代器 ...........554
24.16 從頭創建集合..........561
24.17 Java和Scala集合互轉 ........563
24.18 結語 ..........564
第25章 Scala集合架構 .........565
25.1 集合構建器 .........565
25.2 抽取公共操作 .........567
25.3 集成新的集合 .........572
25.4 結語 ..........588
第26章 提取器 ...........589
26.1 示例:提取電子郵箱地址.......589
26.2 提取器...........591
26.3 提取0或1個變量的模式 ........594
26.4 提取可變長度參數的模式.......596
26.5 提取器和序列模式 ........598
26.6 提取器和樣例類的對比.......599
26.7 正則表達式 .........601
26.8 結語 ..........604
第27章 注解 ...........606
27.1 為什么要有注解? ........606
27.2 注解的語法 .........607
27.3 標準注解...........609
27.4 結語 ..........613
第28章 使用XML ..........614
28.1 半結構化數據 .........614
28.2 XML概覽 ..........615
28.3 XML字面量 ..........616
28.4 序列化...........618
28.5 拆解XML ..........620
28.6 反序列化...........622
28.7 加載和保存 .........623
28.8 對XML做模式匹配 .........624
28.9 結語 ..........628
第29章 用對象實現模塊化編程 ........629
29.1 問題描述...........630
29.2 食譜應用程序 .........631
29.3 抽象 ..........634
29.4 將模塊拆分成特質 ........638
29.5 運行時鏈接 .........640
29.6 跟蹤模塊實例 .........642
29.7 結語 ..........643
第30章 對象相等性.........645
30.1 Scala中的相等性 .........645
30.2 編寫相等性方法 ........646
30.3 為參數化類型定義相等性.......660
30.4 如何編寫equals和hashCode方法 .......664
30.5 結語 ..........668
第31章 結合Scala和Java .........669
31.1 從Java使用Scala .........669
31.2 注解 ..........672
31.3 通配類型...........678
31.4 同時編譯Scala和Java ........680
31.5 基于Scala 2.12特性的Java 8集成 ......681
31.6 結語 ..........685
第32章 Future和并發編程 .........686
32.1 天堂里的煩惱 .........687
32.2 異步執行和Try ..........688
32.3 使用Future ..........690
32.4 測試Future ..........705
32.5 結語 ..........708
第33章 組合子解析.........709
33.1 示例:算術表達式 ........710
33.2 運行你的解析器 ........712
33.3 基本的正則表達式解析器.......713
33.4 另一個示例:JSON ........714
33.5 解析器輸出 .........717
33.6 實現組合子解析器........723
33.7 字符串字面量和正則表達式 .......732
33.8 詞法分析和解析 ........733
33.9 錯誤報告...........734
33.10 回溯和LL(1) ..........736
33.11 結語 ...........737
第34章 GUI編程...........740
34.1 第一個Swing應用程序 ........740
34.2 面板和布局 .........743
34.3 處理事件...........745
34.4 示例:攝氏/華氏轉換器 .......748
34.5 結語 ..........750
第35章 SCells試算表 .........752
35.1 可視化框架.........752
35.2 將數據錄入和顯示分開.......755
35.3 公式..........758
35.4 解析公式...........760
35.5 求值..........765
35.6 操作類庫...........768
35.7 變更通知...........771
35.8 結語..........775
附錄A Unix和Windows環境的Scala腳本 .......777
關于作者 ............798
序: