關(guān)于我們
書(shū)單推薦
新書(shū)推薦
|
快學(xué)Scala
Scala是一門(mén)主要以Java虛擬機(jī)(JVM)為目標(biāo)運(yùn)行環(huán)境并將面向?qū)ο蠛秃瘮?shù)式編程語(yǔ)言的最佳特性結(jié)合在一起的編程語(yǔ)言。你可以使用Scala編寫(xiě)出更加精簡(jiǎn)的程序,同時(shí)充分利用并發(fā)的威力。由于Scala默認(rèn)運(yùn)行于JVM之上,因此它可以訪問(wèn)任何Java類(lèi)庫(kù)并且與Java框架進(jìn)行互操作。通過(guò)ScalaJS項(xiàng)目,Scala還可以被編譯成JavaScript代碼,讓我們更便捷高效地開(kāi)發(fā)Web應(yīng)用。本書(shū)從實(shí)用角度出發(fā),給出了一份快速的、基于代碼的入門(mén)指南。Horstmann以“博客文章大小”的篇幅介紹了Scala的概念,讓你可以快速地掌握和應(yīng)用。實(shí)際上手的操作,清晰定義的能力層次,從初級(jí)到專(zhuān)家級(jí),全程指導(dǎo)。適合有一定的Java編程經(jīng)驗(yàn)、對(duì)Scala感興趣,并希望盡快掌握Scala核心概念和用法的開(kāi)發(fā)者閱讀。
適讀人群 :本書(shū)適合有一定Java編程經(jīng)驗(yàn)、對(duì)Scala感興趣,并希望盡快掌握Scala核心概念和用法的開(kāi)發(fā)者閱讀。
Scala擁抱函數(shù)式編程風(fēng)格,又沒(méi)有拋棄面向?qū)ο蟮木幊谭妒,可以編?xiě)出比Java更精簡(jiǎn)的程序。由于運(yùn)行在JVM之上,可訪問(wèn)任何Java類(lèi)庫(kù),能跟Java框架互操作,也更容易地發(fā)揮并發(fā)編程的威力。
《快學(xué)Scala(第2版)》介紹Scala那些能讓你快速上手干活兒的核心概念和技巧,卻并不試圖窮舉所有語(yǔ)言特性,也不會(huì)用冗長(zhǎng)、過(guò)于機(jī)巧的示例來(lái),而是仔細(xì)斟酌例子和練習(xí),按照清晰定義的能力層級(jí)指引你成為專(zhuān)家。
* 快速熟悉Scala解釋器、語(yǔ)法、工具和獨(dú)有的使用習(xí)慣
* 掌握核心語(yǔ)言特性:函數(shù)、數(shù)組、映射、元組、包、引入、異常處理等
* 熟悉Scala面向?qū)ο缶幊蹋侯?lèi)、繼承和特質(zhì)
* 使用Scala處理現(xiàn)實(shí)世界的編程任務(wù):操作文件、正則表達(dá)式和XML
* 使用高階函數(shù)和功能強(qiáng)大的Scala集合類(lèi)庫(kù)
* 利用Scala強(qiáng)大的模式匹配和樣例類(lèi)
* 利用Scala的future構(gòu)建并發(fā)程序
* 實(shí)現(xiàn)領(lǐng)域特定語(yǔ)言
* 理解Scala類(lèi)型系統(tǒng)
* 應(yīng)用高級(jí)的“強(qiáng)力工具”,如注解、隱式轉(zhuǎn)換和隱式參數(shù)、類(lèi)型類(lèi)等
譯 者 序
Scala是一門(mén)十分有趣又非常實(shí)用的語(yǔ)言,它以JVM為目標(biāo)環(huán)境,將面向?qū)ο蠛秃瘮?shù)式編程有機(jī)地結(jié)合在一起,帶來(lái)獨(dú)特的編程體驗(yàn)。
它既有動(dòng)態(tài)語(yǔ)言那樣的靈活簡(jiǎn)潔,同時(shí)又保留了靜態(tài)類(lèi)型檢查帶來(lái)的安全保障和執(zhí)行效率,加上其強(qiáng)大的抽象能力,既能處理腳本化的臨時(shí)任務(wù),又能處理高并發(fā)場(chǎng)景下的分布式互聯(lián)網(wǎng)大數(shù)據(jù)應(yīng)用,可謂能縮能伸。
我大約是從2009年開(kāi)始接觸Scala的。在此之前曾做過(guò)多年的Java開(kāi)發(fā),其間也陸陸續(xù)續(xù)接觸過(guò)JRuby、Groovy和Python,但沒(méi)有一門(mén)語(yǔ)言能像Scala這樣,讓我產(chǎn)生持續(xù)的興趣和熱情,讓我重新感受到學(xué)習(xí)、思考和解決問(wèn)題的樂(lè)趣。Scala為我開(kāi)了一扇窗,將我?guī)нM(jìn)了函數(shù)式編程的世界,在打破舊有思維模式的同時(shí),讓我的整個(gè)計(jì)算機(jī)編程知識(shí)體系重組,看待很多技術(shù)問(wèn)題的角度都不一樣了。這種感覺(jué),不亞于我前些年接觸Linux。
Scala不光是一門(mén)值得用心學(xué)習(xí)的語(yǔ)言,同時(shí)也是一門(mén)可以直接上手拿來(lái)解決實(shí)際問(wèn)題的語(yǔ)言。它跟Java的集成度很高,可以直接使用Java社區(qū)大量成熟的技術(shù)框架和方案。由于它直接編譯成Java字節(jié)碼,因此我們可以充分利用JVM這個(gè)高性能的運(yùn)行平臺(tái)為我們提供的便利和保障。
目前國(guó)內(nèi)外已經(jīng)有很多公司和個(gè)人采用Scala來(lái)構(gòu)建其平臺(tái)和應(yīng)用。作為JVM上第一個(gè)獲得廣泛成功的非Java語(yǔ)言,Scala正以它 獨(dú)特的魅力吸引著越來(lái)越多人的熱情投入。
你手里的這本書(shū),出自《Java核心技術(shù)》(Core Java)的作者Cay S. Horstmann。
書(shū)中每一章的篇幅都不長(zhǎng),娓娓道來(lái),沁人心脾,適合有一定經(jīng)驗(yàn)的Java程序員閱讀。書(shū)中幾乎所有Scala相關(guān)的核心內(nèi)容都有涉及,由淺入深,深入淺出,非常適合讀者快速上手。本書(shū)是原著第2版,針對(duì)Scala 2.12版進(jìn)行了全面更新。
當(dāng)然了,如果你想要用好Scala,想把它發(fā)揮到更高的層次,基本功必須扎實(shí)。這本書(shū)講的都是基本招式,看似平實(shí)無(wú)華,實(shí)則招招受用。對(duì)于一線開(kāi)發(fā)人員,本書(shū)非常值得放在案頭反復(fù)揣摩練習(xí)。
廣大Scala愛(ài)好者們,這是為你們準(zhǔn)備的書(shū),希望你們也和我一樣,在Scala中找到樂(lè)趣,找到歸屬,你們是我完成本書(shū)翻譯的動(dòng)力。
感謝Martin Odersky和他的團(tuán)隊(duì),為我們帶來(lái)如此美妙的編程語(yǔ)言;感謝電子工業(yè)出版社、張春雨編輯第一時(shí)間從國(guó)外引進(jìn)這本書(shū)的第2版;感謝編輯團(tuán)隊(duì)和其他幕后工作者的辛勤勞動(dòng);最后還要感謝我的家人,感謝你們的理解和支持。
在本書(shū)的翻譯過(guò)程中,譯者雖已盡力將原著的真實(shí)意思以符合中文習(xí)慣的方式呈現(xiàn)給大家,但畢竟能力有限,問(wèn)題和疏漏在所難免,懇請(qǐng)各位讀者批評(píng)指正,聯(lián)系郵箱:gaoyuxiang.scala@gmail.com。
高宇翔
2017年于上海
第1版序
幾年前我和Cay Horstmann見(jiàn)面,他告訴我Scala需要一本更好的入門(mén)書(shū)。當(dāng)時(shí)我自己的書(shū)才剛出來(lái),因此我當(dāng)然要問(wèn)他覺(jué)得我那本書(shū)有哪里不好。他回答說(shuō),書(shū)很不錯(cuò),但就是太長(zhǎng)了,他的學(xué)生們是不會(huì)有耐心讀完800頁(yè)的《Scala編程》(Programming in Scala)的。我認(rèn)為他說(shuō)得有一定道理。然后他就開(kāi)始著力改變這個(gè)狀況,于是就有了這本《快學(xué)Scala》。
看到這本書(shū)終于完成我非常高興,因?yàn)樗媲械赜∽C了書(shū)名所表達(dá)的意思。這是一部快速實(shí)用的Scala入門(mén)指引,詳細(xì)解釋了Scala到底有什么特別,與Java的區(qū)別在哪里,如何克服學(xué)習(xí)中常見(jiàn)的困難,以及如何編寫(xiě)優(yōu)質(zhì)的Scala代碼。
Scala是一門(mén)具備高度表達(dá)能力且十分靈活的語(yǔ)言。它讓類(lèi)庫(kù)編寫(xiě)者們可以使用非常精巧的抽象,以便類(lèi)庫(kù)的使用者們可以簡(jiǎn)單地、直觀地表達(dá)自己。因此,根據(jù)代碼種類(lèi)的不同,它可以很簡(jiǎn)單,也可以很復(fù)雜。
一年前,我曾試著通過(guò)一組用于Scala及其標(biāo)準(zhǔn)類(lèi)庫(kù)的層級(jí)定義來(lái)對(duì)這個(gè)問(wèn)題做一些澄清。首先按應(yīng)用程序開(kāi)發(fā)人員和類(lèi)庫(kù)設(shè)計(jì)者分開(kāi),然后各自又分為三個(gè)層級(jí)。初級(jí)的內(nèi)容可以很快被掌握并且足夠用于產(chǎn)出實(shí)際代碼。中級(jí)的內(nèi)容可以使程序變得更加精簡(jiǎn)、更加函數(shù)式,并且可以讓類(lèi)庫(kù)使用起來(lái)更加靈活。而最高級(jí)的內(nèi)容是為那些解決特定問(wèn)題、處理特定任務(wù)的專(zhuān)家準(zhǔn)備的。當(dāng)時(shí)我這樣寫(xiě)道:
我希望這個(gè)層級(jí)劃分有助于讓Scala的初學(xué)者決定以怎樣的順序來(lái)學(xué)習(xí),并且能夠給教師和書(shū)籍作者一些建議,以怎樣的順序來(lái)呈現(xiàn)相關(guān)內(nèi)容。
Cay的書(shū)是第一本系統(tǒng)化地采納這個(gè)想法的Scala入門(mén)書(shū)。每一章都相應(yīng)地打上了層級(jí)標(biāo)簽,讓你一目了然地知道該章的難易程度,以及它是面向類(lèi)庫(kù)編寫(xiě)者的還是面向應(yīng)用程序開(kāi)發(fā)人員的。
如你所預(yù)期的那樣,開(kāi)始的章節(jié)是對(duì)基本的Scala功能的快速介紹。不過(guò)本書(shū)并不就此收手,接下來(lái)還涵蓋了許多“高級(jí)”概念,直到最后非常高端的內(nèi)容,這些內(nèi)容通常并不會(huì)出現(xiàn)在編程語(yǔ)言的入門(mén)指引當(dāng)中,比如如何編寫(xiě)解析器組合子,如何使用定界延續(xù),等等。Cay令人欽佩地做到了讓哪怕是最高級(jí)的概念理解起來(lái)也那么簡(jiǎn)單明了。
我非常喜歡《快學(xué)Scala》的構(gòu)思,于是向Cay和他的編輯Greg Doench提出能否將本書(shū)基礎(chǔ)章節(jié)部分作為免費(fèi)資料放在Typesafe網(wǎng)站上供大家下載。他們大方地答應(yīng)了我的請(qǐng)求,對(duì)此我深表感謝。這樣一來(lái),每個(gè)人都可以很快地獲取到這份在我看來(lái)是目前市面上最緊湊的Scala入門(mén)指南。
Martin Odersky
2012年1月
前 言
Java和C++的進(jìn)化速度已經(jīng)大不如前,那些樂(lè)于使用更現(xiàn)代的語(yǔ)言特性的程序員們正在將眼光移向他處。Scala是一個(gè)很有吸引力的選擇;事實(shí)上,在我看來(lái),對(duì)于想要提升生產(chǎn)效率的程序員而言,Scala是最具吸引力的一個(gè)。Scala的語(yǔ)法十分簡(jiǎn)潔,相比Java的樣板代碼,Scala讓人耳目一新。Scala運(yùn)行于Java虛擬機(jī)之上,讓我們可以使用海量現(xiàn)成的類(lèi)庫(kù)和工具。Scala并非只以Java虛擬機(jī)作為目標(biāo)平臺(tái)。ScalaJS項(xiàng)目產(chǎn)出的是JavaScript代碼,讓你用一門(mén)不是JavaScript的語(yǔ)言同時(shí)編寫(xiě)Web應(yīng)用的服務(wù)端和客戶(hù)端。它在擁抱函數(shù)式編程的同時(shí),并沒(méi)有廢棄面向?qū)ο,使你得以逐步了解和學(xué)習(xí)一種全新的編程范式。Scala解釋器讓你快速運(yùn)行實(shí)驗(yàn)代碼,這使得學(xué)習(xí)Scala的過(guò)程頗為輕松愜意。最后,同時(shí)也是很重要的一點(diǎn)是,Scala是靜態(tài)類(lèi)型的,編譯器能夠幫助我們找出大部分錯(cuò)誤,這樣就不至于要等到程序運(yùn)行起來(lái)以后才發(fā)現(xiàn)(或未發(fā)現(xiàn))這些錯(cuò)誤,造成時(shí)間上的浪費(fèi)。
本書(shū)是寫(xiě)給那些對(duì)于立即開(kāi)始Scala編程有急切渴望的讀者的。我假定你懂Java、C#或C++,并且我也不會(huì)去解釋變量、循環(huán)或類(lèi)這些基本概念。我不去窮舉Scala的所有特性,不會(huì)宣傳某一種范式比另一種更優(yōu)越,也不會(huì)用冗長(zhǎng)的、過(guò)于機(jī)巧的示例來(lái)“折磨”你。與此相反,你將會(huì)以緊湊的篇幅得到你想要的信息,可以根據(jù)需要選擇閱讀和復(fù)習(xí)。
Scala是一門(mén)內(nèi)容很豐富的語(yǔ)言,不過(guò)你并不需要知道它的所有細(xì)節(jié),就已經(jīng)可以有效地使用了。Scala的創(chuàng)始人Martin Odersky對(duì)應(yīng)用程序開(kāi)發(fā)工程師和類(lèi)庫(kù)設(shè)計(jì)人員所需的專(zhuān)業(yè)知識(shí)技能的層級(jí)進(jìn)行了定義。
對(duì)每一章(偶爾也針對(duì)特定的小節(jié)),我都標(biāo)出了所需的經(jīng)驗(yàn)層級(jí),大致的遞進(jìn)順序是: A1 、L1 、A2 、L2 、A3 、L3 。就算你不打算設(shè)計(jì)自己的類(lèi)庫(kù),知道Scala向類(lèi)庫(kù)設(shè)計(jì)人員提供了哪些工具對(duì)于更有效地使用類(lèi)庫(kù)也會(huì)大有裨益。
這是本書(shū)的第2版,針對(duì)Scala 2.12做了全面的更新。我添加了對(duì)新近的Scala功能特性如字符串插值、動(dòng)態(tài)調(diào)用、隱式類(lèi)和future的介紹,并更新了所有章節(jié)來(lái)反映當(dāng)下的Scala用法。
我希望你通過(guò)本書(shū)享受到學(xué)習(xí)Scala的樂(lè)趣。如果你發(fā)現(xiàn)了錯(cuò)誤或者有任何改進(jìn)建議,請(qǐng)?jiān)L問(wèn)http://horstmann.com/scala并留言。在那里,你也能找到指向包含本書(shū)全部代碼示例的打包文件的鏈接。
在此特別感謝Dmitry Kirsanov和Alina Kirsanova將我的手稿從XHTML轉(zhuǎn)換成如此漂亮的排版樣式,讓我可以將注意力集中在內(nèi)容而不是在格式調(diào)整上。每個(gè)作者都應(yīng)享受這種待遇!
參與本書(shū)審稿的人員有:Adrian Cumiskey、Mike Davis、Rob Dickens、Steve Haines、Susan Potter、Daniel Sobral、Craig Tataryn、David Walend和William Wheeler。
非常感謝你們的評(píng)價(jià)和建議!
最后,一如既往,感謝我的編輯Greg Doench,感謝他對(duì)我撰寫(xiě)本書(shū)的鼓勵(lì)和貫穿于整個(gè)過(guò)程當(dāng)中的洞察力。
Cay S. Horstmann
2016年于舊金山
讀者服務(wù)
輕松注冊(cè)成為博文視點(diǎn)社區(qū)用戶(hù)(www.broadview.com.cn),掃碼直達(dá)本書(shū)頁(yè)面。
■ 提交勘誤:您對(duì)書(shū)中內(nèi)容的修改意見(jiàn)可在提交勘誤處提交,若被采納,將獲贈(zèng)博文視點(diǎn)社區(qū)積分(在您購(gòu)買(mǎi)電子書(shū)時(shí),積分可用來(lái)抵扣相應(yīng)金額)。
■ 交流互動(dòng):在頁(yè)面下方讀者評(píng)論處留下您的疑問(wèn)或觀點(diǎn),與我們和其他讀者一同學(xué)習(xí)交流。
頁(yè)面入口:http://www.broadview.com.cn/31995
Cay S. Horstmann是《Java核心技術(shù)》卷1和卷2第10版(Prentice Hall出版社2016年出版)的作者,此外,他還著有其他十多本面向?qū)I(yè)程序員和計(jì)算機(jī)科學(xué)專(zhuān)業(yè)學(xué)生的書(shū)籍。他是San Jose州立大學(xué)計(jì)算機(jī)科學(xué)專(zhuān)業(yè)的教授,同時(shí)也是一位Java Champion。
高宇翔,資深軟件開(kāi)發(fā)工程師和系統(tǒng)架構(gòu)師,同時(shí)也是Scala在國(guó)內(nèi)的早期布道者和實(shí)踐者,曾譯有《快學(xué)Scala》(第1版)和《Scala編程》等專(zhuān)業(yè)書(shū)籍。
目 錄
譯者序 V
第1版序 XVII
前言 XIX
作者簡(jiǎn)介 XXIII
第1章 基礎(chǔ) A1 1
1.1 Scala解釋器 1
1.2 聲明值和變量 4
1.3 常用類(lèi)型 5
1.4 算術(shù)和操作符重載 7
1.5 關(guān)于方法調(diào)用 8
1.6 apply方法 9
1.7 Scaladoc 11
練習(xí) 16
第2章 控制結(jié)構(gòu)和函數(shù) A1 19
2.1 條件表達(dá)式 20
2.2 語(yǔ)句終止 22
2.3 塊表達(dá)式和賦值 22
2.4 輸入和輸出 23
2.5 循環(huán) 25
2.6 高級(jí)for循環(huán) 27
2.7 函數(shù) 28
2.8 默認(rèn)參數(shù)和帶名參數(shù) L1 29
2.9 變長(zhǎng)參數(shù) L1 29
2.10 過(guò)程 31
2.11 懶值 L1 31
2.12 異常 32
練習(xí) 35
第3章 數(shù)組相關(guān)操作 A1 39
3.1 定長(zhǎng)數(shù)組 39
3.2 變長(zhǎng)數(shù)組:數(shù)組緩沖 40
3.3 遍歷數(shù)組和數(shù)組緩沖 41
3.4 數(shù)組轉(zhuǎn)換 42
3.5 常用算法 44
3.6 解讀Scaladoc 45
3.7 多維數(shù)組 47
3.8 與Java的互操作 48
練習(xí) 49
第4章 映射和元組 A1 53
4.1 構(gòu)造映射 53
4.2 獲取映射中的值 54
4.3 更新映射中的值 55
4.4 迭代映射 56
4.5 已排序映射 57
4.6 與Java的互操作 57
4.7 元組 58
4.8 拉鏈操作 59
練習(xí) 60
第5章 類(lèi) A1 63
5.1 簡(jiǎn)單類(lèi)和無(wú)參方法 63
5.2 帶getter和setter的屬性 64
5.3 只帶getter的屬性 67
5.4 對(duì)象私有字段 68
5.5 Bean屬性 L1 69
5.6 輔助構(gòu)造器 71
5.7 主構(gòu)造器 72
5.8 嵌套類(lèi) L175
練習(xí) 78
第6章 對(duì)象 A1 81
6.1 單例對(duì)象 81
6.2 伴生對(duì)象 82
6.3 擴(kuò)展類(lèi)或特質(zhì)的對(duì)象 83
6.4 apply方法 84
6.5 應(yīng)用程序?qū)ο?85
6.6 枚舉 86
練習(xí) 87
第7章 包和引入 A1 91
7.1 包 91
7.2 作用域規(guī)則 93
7.3 串聯(lián)式包語(yǔ)句 95
7.4 文件頂部標(biāo)記法 95
7.5 包對(duì)象 96
7.6 包可見(jiàn)性 97
7.7 引入 97
7.8 任何地方都可以聲明引入 98
7.9 重命名和隱藏方法 99
7.10 隱式引入 99
練習(xí) 100
第8章 繼承 A1 103
8.1 擴(kuò)展類(lèi) 103
8.2 重寫(xiě)方法 104
8.3 類(lèi)型檢查和轉(zhuǎn)換 105
8.4 受保護(hù)字段和方法 106
8.5 超類(lèi)的構(gòu)造 106
8.6 重寫(xiě)字段 107
8.7 匿名子類(lèi) 109
8.8 抽象類(lèi) 109
8.9 抽象字段 110
8.10 構(gòu)造順序和提前定義 L3 110
8.11 Scala類(lèi)繼承關(guān)系 112
8.12 對(duì)象相等性 L1 114
8.13 值類(lèi) L2 116
練習(xí) 117
第9章 文件和正則表達(dá)式 A1 121
9.1 讀取行 121
9.2 讀取字符 122
9.3 讀取詞法單元和數(shù)字 123
9.4 從URL或其他源讀取 124
9.5 讀取二進(jìn)制文件 124
9.6 寫(xiě)入文本文件 124
9.7 訪問(wèn)目錄 125
9.8 序列化 125
9.9 進(jìn)程控制 A2126
9.10 正則表達(dá)式 129
9.11 正則表達(dá)式組 130
練習(xí) 131
第10章 特質(zhì) A1135
10.1 為什么沒(méi)有多重繼承 135
10.2 當(dāng)作接口使用的特質(zhì) 137
10.3 帶有具體實(shí)現(xiàn)的特質(zhì) 138
10.4 帶有特質(zhì)的對(duì)象 139
10.5 疊加在一起的特質(zhì) 140
10.6 在特質(zhì)中重寫(xiě)抽象方法 141
10.7 當(dāng)作富接口使用的特質(zhì) 142
10.8 特質(zhì)中的具體字段 143
10.9 特質(zhì)中的抽象字段 144
10.10 特質(zhì)構(gòu)造順序 145
10.11 初始化特質(zhì)中的字段 147
10.12 擴(kuò)展類(lèi)的特質(zhì) 148
10.13 自身類(lèi)型 L2 149
10.14 背后發(fā)生了什么 151
練習(xí) 152
第11章 操作符 A1157
11.1 標(biāo)識(shí)符 157
11.2 中置操作符 158
11.3 一元操作符 159
11.4 賦值操作符 160
11.5 優(yōu)先級(jí) 161
11.6 結(jié)合性 162
11.7 apply和update方法 162
11.8 提取器 L2 164
11.9 帶單個(gè)參數(shù)或無(wú)參數(shù)的提取器 L2166
11.10 unapplySeq方法 L2167
11.11 動(dòng)態(tài)調(diào)用 L2 167
練習(xí) 171
第12章 高階函數(shù) L1 175
12.1 作為值的函數(shù) 175
12.2 匿名函數(shù) 177
12.3 帶函數(shù)參數(shù)的函數(shù) 178
12.4 參數(shù)(類(lèi)型)推斷 179
12.5 一些有用的高階函數(shù) 180
12.6 閉包 181
12.7 SAM轉(zhuǎn)換 182
12.8 柯里化 183
12.9 控制抽象 185
12.10 return表達(dá)式 186
練習(xí) 187
第13章 集合 A2191
13.1 主要的集合特質(zhì) 192
13.2 可變和不可變集合 193
13.3 序列 195
13.4 列表 196
13.5 集 197
13.6 用于添加或去除元素的操作符 198
13.7 常用方法 201
13.8 將函數(shù)映射到集合 203
13.9 化簡(jiǎn)、折疊和掃描 A3 205
13.10 拉鏈操作 209
13.11 迭代器 210
13.12 流 A3 211
13.13 懶視圖 A3 213
13.14 與Java集合的互操作 213
13.15 并行集合 215
練習(xí) 217
第14章 模式匹配和樣例類(lèi) A2 221
14.1 更好的switch 222
14.2 守衛(wèi) 223
14.3 模式中的變量 223
14.4 類(lèi)型模式 224
14.5 匹配數(shù)組、列表和元組 225
14.6 提取器 227
14.7 變量聲明中的模式 227
14.8 for表達(dá)式中的模式 229
14.9 樣例類(lèi) 229
14.10 copy方法和帶名參數(shù) 230
14.11 case語(yǔ)句中的中置表示法 231
14.12 匹配嵌套結(jié)構(gòu) 232
14.13 樣例類(lèi)是邪惡的嗎 233
14.14 密封類(lèi) 234
14.15 模擬枚舉 235
14.16 Option類(lèi)型 235
14.17 偏函數(shù) L2 236
練習(xí) 238
第15章 注解 A2243
15.1 什么是注解 243
15.2 什么可以被注解 244
15.3 注解參數(shù) 245
15.4 注解實(shí)現(xiàn) 246
15.5 針對(duì)Java特性的注解 247
15.5.1 Java修飾符 247
15.5.2 標(biāo)記接口 248
15.5.3 受檢異常 249
15.5.4 變長(zhǎng)參數(shù) 249
15.5.5 JavaBeans 250
15.6 用于優(yōu)化的注解 250
15.6.1 尾遞歸 .250
15.6.2 跳轉(zhuǎn)表生成與內(nèi)聯(lián) 252
15.6.3 可省略方法 253
15.6.4 基本類(lèi)型的特殊化 254
15.7 用于錯(cuò)誤和警告的注解 255
練習(xí) 256
第16章 XML處理 A2 259
16.1 XML字面量 260
16.2 XML節(jié)點(diǎn) 260
16.3 元素屬性 262
16.4 內(nèi)嵌表達(dá)式 263
16.5 在屬性中使用表達(dá)式 264
16.6 特殊節(jié)點(diǎn)類(lèi)型 265
16.7 類(lèi)XPath表達(dá)式 266
16.8 模式匹配 267
16.9 修改元素和屬性 268
16.10 XML變換 269
16.11 加載和保存 270
16.12 命名空間 273
練習(xí) 275
第17章 Future A2 277
17.1 在future中運(yùn)行任務(wù) 278
17.2 等待結(jié)果 280
17.3 Try類(lèi) 281
17.4 回調(diào) 282
17.5 組合future任務(wù) 283
17.6 其他future變換 286
17.7 Future對(duì)象中的方法 288
17.8 Promise 289
17.9 執(zhí)行上下文 291
練習(xí) 292
第18章 類(lèi)型參數(shù) L2 297
18.1 泛型類(lèi) 298
18.2 泛型函數(shù) 298
18.3 類(lèi)型變量界定 298
18.4 視圖界定 300
18.5 上下文界定 301
18.6 ClassTag上下文界定 301
18.7 多重界定 302
18.8 類(lèi)型約束 L3302
18.9 型變 304
18.10 協(xié)變和逆變點(diǎn) 305
18.11 對(duì)象不能泛型 307
18.12 類(lèi)型通配符 308
練習(xí) 309
第19章 高級(jí)類(lèi)型 L2 313
19.1 單例類(lèi)型 313
19.2 類(lèi)型投影 315
19.3 路徑 316
19.4 類(lèi)型別名 317
19.5 結(jié)構(gòu)類(lèi)型 318
19.6 復(fù)合類(lèi)型 319
19.7 中置類(lèi)型 320
19.8 存在類(lèi)型 321
19.9 Scala類(lèi)型系統(tǒng) 322
19.10 自身類(lèi)型 323
19.11 依賴(lài)注入 325
19.12 抽象類(lèi)型 L3 327
19.13 家族多態(tài) L3 329
19.14 高等類(lèi)型 L3 333
練習(xí) 336
第20章 解析 A3 341
20.1 文法 342
20.2 組合解析器操作 343
20.3 解析器結(jié)果變換 345
20.4 丟棄詞法單元 347
20.5 生成解析樹(shù) 348
20.6 避免左遞歸 348
20.7 更多的組合子 350
20.8 避免回溯 352
20.9 記憶式解析器 353
20.10 解析器說(shuō)到底是什么 354
20.11 正則解析器 355
20.12 基于詞法單元的解析器 356
20.13 錯(cuò)誤處理 358
練習(xí) 359
第21章 隱式轉(zhuǎn)換和隱式參數(shù) L3. 363
21.1 隱式轉(zhuǎn)換 363
21.2 利用隱式轉(zhuǎn)換豐富現(xiàn)有類(lèi)庫(kù)的功能 364
21.3 引入隱式轉(zhuǎn)換 365
21.4 隱式轉(zhuǎn)換規(guī)則 367
21.5 隱式參數(shù) 368
21.6 利用隱式參數(shù)進(jìn)行隱式轉(zhuǎn)換 370
21.7 上下文界定 371
21.8 類(lèi)型類(lèi) 372
21.9 類(lèi)型證明 374
21.10 @implicitNotFound注解 376
21.11 CanBuildFrom解讀 376
練習(xí) 379
詞匯表 381
你還可能感興趣
我要評(píng)論
|