關(guān)于我們
書(shū)單推薦
新書(shū)推薦
|
Scala編程(第5版) 本書(shū)由直接參與 Scala 開(kāi)發(fā)的一線人員編寫(xiě),深入介紹了 Scala 這門(mén)結(jié)合面向?qū)ο蠛秃瘮?shù)式的編程語(yǔ)言的核心特性和設(shè)計(jì)取舍。繼第 4 版后,時(shí)隔一年,本書(shū)迎來(lái)重大更新,內(nèi)容覆蓋 Scala 3.0,對(duì)新的縮進(jìn)語(yǔ)法、并集類型、交集類型、枚舉、代數(shù)數(shù)據(jù)類型、上下文參數(shù)、特質(zhì)參數(shù)、擴(kuò)展方法、類型族等都有詳細(xì)介紹。本書(shū)適合有一定編程經(jīng)驗(yàn)的開(kāi)發(fā)者閱讀,尤其是對(duì) Scala 3.0 新特性感興趣的開(kāi)發(fā)者朋友。即便是不直接使用 Scala 的讀者,也能從本書(shū)中學(xué)到大量關(guān)于函數(shù)式和面向?qū)ο蟮木幊谈拍詈图记伞?/p> 《Scala編程(第5版)》是Scala的權(quán)威圖書(shū),涵蓋語(yǔ)言基礎(chǔ)與重要類庫(kù),可被奉為圭臬的領(lǐng)域重要參考書(shū)。。Scala是Java平臺(tái)上的一門(mén)功能強(qiáng)大的主流語(yǔ)言,它以獨(dú)到的方式將面向?qū)ο蠛秃瘮?shù)式編程的概念有機(jī)地結(jié)合在一起,供開(kāi)發(fā)者使用。本書(shū)由Scala語(yǔ)言設(shè)計(jì)者編寫(xiě),將循序漸進(jìn)地向你介紹Scala編程語(yǔ)言和它背后的設(shè)計(jì)理念。本書(shū)幾經(jīng)迭代,編排、組織精細(xì)。開(kāi)始幾章教你足夠多的基礎(chǔ)知識(shí),讓你直接上手用Scala處理簡(jiǎn)單任務(wù)。本書(shū)嚴(yán)格遵循這樣的原則:新概念都基于已出現(xiàn)過(guò)的概念,通過(guò)階梯式教學(xué),讓你逐步掌握語(yǔ)言及其背后的設(shè)計(jì)理念。第5版是重磅新版,全面升級(jí)到Scala 3.0,并對(duì)以下特性進(jìn)行詳細(xì)介紹: 枚舉和代數(shù)數(shù)據(jù)類型 上下文參數(shù) 擴(kuò)展方法 安靜語(yǔ)法和可選花括號(hào) 特質(zhì)參數(shù) 并集類型和交集類型 導(dǎo)出子句 頂層定義 譯者序 Scala3終于來(lái)了。 這是一次重大的更新。Scala編輯器從底層開(kāi)始被全部重寫(xiě)。不得不說(shuō),這也是Scala創(chuàng)始團(tuán)隊(duì)的一次冒險(xiǎn),畢竟已經(jīng)有很多成功的公司、團(tuán)隊(duì)和個(gè)人在早期版本,尤其是Scala2.8之后的Scala生態(tài)中找到了自己的位置、大量以Scala編寫(xiě)的類庫(kù)和業(yè)務(wù)代碼在線上運(yùn)行。 可Martin Odersky 和他的團(tuán)隊(duì)就是聊足了勁要升級(jí),想從根本上修復(fù)那些讓Scala還不夠理論完備的設(shè)計(jì)。但是理論完備有那么重要嗎?站在編程語(yǔ)言設(shè)計(jì)者的角度。我傾向于肯定的答案。而站在使用者的角度。我更關(guān)心它帶來(lái)了那些變化,以及我能不能在使用中適癥這些變化 讓我頗感意外的是,真正上手Scala3,并沒(méi)有想象中的那么困難重重。甚至抱受爭(zhēng)議的縮進(jìn)語(yǔ)法,也沒(méi)有帶來(lái)任何不適。原有的代碼不需要修改,或者僅僅需要少量修改。就能順利地通過(guò)Scala3的編譯。你很難相信這是一門(mén)全新的、從里到外重新實(shí)現(xiàn)的編程語(yǔ)言。 經(jīng)過(guò)短暫的適應(yīng)期。Scala3的諸多新特性,如枚舉、上下文參數(shù)、擴(kuò)展方法和類型族等,都能被我靈活運(yùn)用。這些新特性初看起來(lái)各有各的模樣,并且實(shí)際使用下來(lái),也多少都帶著一些新編譯器的味道,但是你能嗅到類型系統(tǒng)的某種一致性。Scala一直能在很多看似完全不同的概念之間找到關(guān)聯(lián)、似乎總能透過(guò)表象,直面本質(zhì)。這種感覺(jué)很微妙、讓人既有些新奇,又非常熟悉。 Scala 社區(qū)這幾年也有非常大的變化和進(jìn)步,值得一提的是,ZIO 這個(gè)面向作用(effect)的編程類庫(kù)對(duì)業(yè)務(wù)代碼中常見(jiàn)的模式進(jìn)行了非常有洞見(jiàn)性的抽象,將函數(shù)式編程以一種類型健壯且高效的方式引人一線開(kāi)發(fā)者的工具庫(kù)中。很自然地,ZIO 在順利發(fā)布1.0版本之后,隨著Scala 3的發(fā)布,也在時(shí)間全面擁抱Scala 3。 你手中的這本《Scala 編程》已經(jīng)是第5版,這一版針對(duì)Scala3進(jìn)行了全面的更新。更新主要體現(xiàn)在兩個(gè)方面:首先,增加了對(duì) Scala3主要的新特性的介紹,所有內(nèi)容和示例代碼都基于Scala3重新梳理和編寫(xiě);其次,在篇幅上進(jìn)行了大幅度調(diào)整,顯著的是把《Scala 編程》拆成了兩卷,卷也就是現(xiàn)在這本《Scala編程》,它保留了 Scala 編程語(yǔ)言核心功能特性和設(shè)計(jì)理念的內(nèi)容,讓大家能夠快速地理解、掌握并使用Scala編寫(xiě)實(shí)用的類庫(kù)和業(yè)務(wù)代碼,而第二卷為《Scala高級(jí)編程》,它將包含更多高級(jí)主題,且單獨(dú)成冊(cè),面向那些對(duì) Scala高級(jí)特性(如宏和元編程)感興趣的讀者。 感謝 Martin Odersky 和他的團(tuán)隊(duì)為我們帶來(lái)這樣一門(mén)獨(dú)特而優(yōu)雅的編程語(yǔ)言,并且不惜冒著社區(qū)分化的風(fēng)險(xiǎn)(現(xiàn)在看來(lái)這個(gè)擔(dān)心很可能是多余的)堅(jiān)持對(duì)語(yǔ)言核心進(jìn)行升級(jí);感謝電子工業(yè)出版社及張春雨編輯,在第1版、第3版和第4版之后,繼續(xù)引進(jìn)本書(shū)的第5版;感謝編輯團(tuán)隊(duì)和其他幕后工作者的辛勤付出;感謝家人無(wú)條件的支持和鼓勵(lì),你們是我永遠(yuǎn)的摯愛(ài)。 在本書(shū)的翻譯過(guò)程中,譯者雖已盡力忠實(shí)呈現(xiàn)原著的本意,但畢竟能力有限,問(wèn)題和疏漏恐難以避免,懇請(qǐng)各位讀者批評(píng)指正、聯(lián)系地址: gaoyuxiang.scala@gmail.com。 高宇翔 2021年于上海 序 見(jiàn)證一門(mén)新編程語(yǔ)言的誕生是一件有趣的事。對(duì)任何一位使用編程語(yǔ)言的人而言無(wú)論你是首次嘗試編程的人還是職業(yè)軟件工程師編程語(yǔ)言看起來(lái)就在那里。就像錘子或斧子一樣,編程語(yǔ)言也是一種工具,讓我們可以做我們想做的。我們很少會(huì)想到工具是怎么來(lái)的,它的設(shè)計(jì)過(guò)程是怎樣的;蛟S我們對(duì)工具的設(shè)計(jì)有自己的看法,但除此之外,我們通常只能接受并運(yùn)用它。 編程語(yǔ)言的創(chuàng)造過(guò)程讓我有了完全不同的視角。各種可能性似乎無(wú)窮無(wú)盡。同時(shí),編程語(yǔ)言也必須滿足看起來(lái)同樣無(wú)窮無(wú)盡的各種約束。這是一種奇怪的張力。 創(chuàng)造一門(mén)新的編程語(yǔ)言有很多方面的原因,例如,某種個(gè)人想要解決的痛點(diǎn),或者某種學(xué)術(shù)上的洞見(jiàn),或者技術(shù)債,或者其他編譯器架構(gòu)的潛在收益,甚至可能是政治因素。對(duì)Scala 3的創(chuàng)造而言,上述原因多少都有一些。 無(wú)論出于何種原因,一切都開(kāi)始于Martin Odersky在某一天突然消失,當(dāng)他幾天后再次出現(xiàn)在某個(gè)研究組會(huì)議上時(shí),他向大家正式宣告自己已經(jīng)開(kāi)始嘗試從零起步編寫(xiě)一個(gè)全新的編譯器,將DOT演算 實(shí)施落地。而在場(chǎng)的我們是一群博士研究生和博士后,在那之前主要負(fù)責(zé)Scala 2的開(kāi)發(fā)和維護(hù)。當(dāng)時(shí),Scala看起來(lái)正在接近看上去難以企及的成功高度,尤其是對(duì)于這樣一門(mén)誕生于瑞士的、一個(gè)聽(tīng)起來(lái)有些奇怪的學(xué)校的偏門(mén)學(xué)術(shù)編程語(yǔ)言。然而就在不久前,Scala得到了舊金山灣區(qū)的很多創(chuàng)業(yè)公司的追捧,成立了Typesafe也就是后來(lái)的Lightbend,專注于支持、維護(hù)和管理Scala 2。那么為什么突然要做一個(gè)全新的編譯器,以及由此帶來(lái)的不一樣的編程語(yǔ)言呢?我們當(dāng)中的大多數(shù)人對(duì)此心存疑慮,但Martin Odersky已經(jīng)下定了決心。 幾個(gè)月過(guò)去了。就像上了發(fā)條一樣,每天中午12點(diǎn),整個(gè)實(shí)驗(yàn)室的人都會(huì)出現(xiàn)在連接各個(gè)辦公室的門(mén)廳。當(dāng)聚集了一定數(shù)量的人員以后,我們就會(huì)一起來(lái)到EPFL的某個(gè)餐廳吃午飯,并享用飯后咖啡。在每天都會(huì)舉行的這個(gè)儀式中,關(guān)于新編譯器的想法是反復(fù)出現(xiàn)的討論話題,例如,從150%兼容Scala 2(避免陷入Python 2和Python 3的困境),到創(chuàng)造一門(mén)全新的全光譜依賴類型編程語(yǔ)言。 研究組中持懷疑態(tài)度的人,一個(gè)接一個(gè)地被Scala 3的某個(gè)特性征服,比如,對(duì)類型檢查器的精簡(jiǎn),全新的編譯器架構(gòu),以及對(duì)類型系統(tǒng)的增強(qiáng)等。隨著時(shí)間的推移,社區(qū)主流也認(rèn)為Scala 3相比Scala 2而言具有顯著的改進(jìn)。對(duì)于這個(gè)結(jié)論,不同的人有不同的理由。對(duì)有些人而言,是因?yàn)镾cala 3將花括號(hào)和條件判定語(yǔ)句的括號(hào)變?yōu)榭蛇x的,從而改善了可讀性。對(duì)其他人而言,是因?yàn)镾cala 3的類型系統(tǒng)更強(qiáng)了。如此種種。 我可以很有信心地說(shuō),Scala 3的設(shè)計(jì)并不是完全依靠直覺(jué)的閉門(mén)造車,而是吸納了過(guò)去設(shè)計(jì)的寶貴經(jīng)驗(yàn),以及EPFL研究組和Scala社區(qū)的多年溝通與交流經(jīng)驗(yàn)。并且,除從頭開(kāi)始在全新的地基上搭建之外,別無(wú)他途。既然Scala 3是從頭開(kāi)始設(shè)計(jì)的,其內(nèi)核就是一門(mén)全新的編程語(yǔ)言。 Scala 3是一門(mén)全新的編程語(yǔ)言。誠(chéng)然,它兼容Scala 2,聽(tīng)起來(lái)像是一門(mén)已經(jīng)存在的編程語(yǔ)言的第三個(gè)重大版本。但是不要被這個(gè)影響了你的判斷,Scala 3實(shí)現(xiàn)了在Scala 2中先行試驗(yàn)、探索的諸多想法的重大精簡(jiǎn)。 在Scala 3的所有特性中,可能Scala的一個(gè)專屬的變化是對(duì)隱式的改動(dòng)。Scala從一開(kāi)始就被聰明的程序員們用來(lái)實(shí)現(xiàn)某種基于Scala特性本就很少有人能想到的功能,更別提這些功能與Scala設(shè)計(jì)本意的背離程度有多大了。這個(gè)先前被稱作隱式的特性可能是Scala中著名的被用來(lái)以各種奇怪的方式改變Scala 2代碼行為的功能點(diǎn)了。隱式的使用場(chǎng)景包括:對(duì)一個(gè)類在事后追加方法,不擴(kuò)展也不重新編譯;或者,在某種特定的上下文中,基于某種類型簽名,自動(dòng)選擇適用于該上下文的正確實(shí)現(xiàn)。上述只是冰山一角我們甚至為此寫(xiě)了一篇論文以對(duì)開(kāi)發(fā)人員使用隱式的各種方法進(jìn)行歸類。 這就像是把旋鈕和杠桿交給用戶,期待他們能做出一臺(tái)精密的儀器,如機(jī)械計(jì)算器。但通常我們得到的是類似于Theo Jansen的動(dòng)力雕塑,而不是某種能一眼看出用途的物件。簡(jiǎn)單而言,如果你交給編程社區(qū)的是一些旋鈕和杠桿,則社區(qū)中那些強(qiáng)悍的選手總能找到這些工具的創(chuàng)新用法。這是人的本性。不過(guò)可能正是在這里,Scala 2犯了錯(cuò)誤,將基礎(chǔ)、通用的旋鈕和杠桿交給了程序員。 我想說(shuō)的是,在Scala 2中,隱式有無(wú)窮無(wú)盡的可能性,這些可能性足夠我們撰寫(xiě)研究生論文,而社區(qū)對(duì)于如何使用隱式并沒(méi)有一個(gè)統(tǒng)一的認(rèn)識(shí)。這種沒(méi)有清晰用途的編程語(yǔ)言特性不應(yīng)該存在。但是很可惜,隱式就是這樣一種存在:很多人將隱式看作Scala獨(dú)有的強(qiáng)大功能,沒(méi)有其他語(yǔ)言能做到;還有很多人認(rèn)為隱式是神秘且經(jīng)常令人困惑的機(jī)制,會(huì)侵入你的代碼,將你的代碼改得面目全非。 你可能已經(jīng)聽(tīng)說(shuō)過(guò)很多種不同形式的表述,但Scala 3代表了這之前所有Scala版本的簡(jiǎn)化版本。隱式是一個(gè)很好的例子。在意識(shí)到那些后空翻程序員希望通過(guò)隱式來(lái)實(shí)現(xiàn)更廣泛的編程模式[如類型族(typeclass)派生]后,Martin Odersky在其他人的幫助下得出的結(jié)論是,我們不應(yīng)該把注意力集中在人們一般如何使用隱式作為編程機(jī)制,而應(yīng)該關(guān)注程序員們想用隱式做什么,然后把這個(gè)目標(biāo)變得更加容易且高效。這就是口頭禪Scala 3專注于意圖而不是機(jī)制的來(lái)源。 Scala 3并不把注意力集中在作為編程機(jī)制的隱式的通用性上,而是關(guān)注開(kāi)發(fā)人員在使用隱式時(shí)想要滿足的特定使用場(chǎng)景,讓其用起來(lái)更加直接。例如,隱式地將上下文或配置信息傳遞給某方法,而不需要程序員顯式地給出重復(fù)的參數(shù);在事后給類追加方法;在算術(shù)運(yùn)算中對(duì)不同類型的值進(jìn)行轉(zhuǎn)換。如今,Scala 3將這些使用方法直接提供給程序員,使他們不需要深入理解Scala編譯器如何解析隱式值,只需要關(guān)心在不重新編譯Bar類的前提下給Bar類追加foo方法這樣的任務(wù)即可;不需要具有博士學(xué)位,只需要把之前的隱式替換成其他更直接的與特定使用場(chǎng)景相關(guān)的關(guān)鍵字即可,如given和using。更多內(nèi)容參見(jiàn)第21章和第22章。 專注于意圖而不是機(jī)制的故事并不止于對(duì)隱式的改造,這個(gè)設(shè)計(jì)哲學(xué)幾乎貫穿了這門(mén)語(yǔ)言的方方面面。例如,對(duì)Scala類型系統(tǒng)的增強(qiáng)和簡(jiǎn)化,包括并集類型(union type)、枚舉(enum)、匹配類型(match type)等;對(duì)Scala語(yǔ)法的清理,包括if、else、while,讓條件判斷讀起來(lái)更像英文。 當(dāng)然,我說(shuō)的這些,你不必盲目相信。無(wú)論你是Scala新手還是有經(jīng)驗(yàn)的Scala開(kāi)發(fā)人員,我希望你和我一樣,Scala 3所包含的許多新的設(shè)計(jì)理念能讓你感到耳目一新且直截了當(dāng)! Heather Miller 瑞士洛桑 引言 本書(shū)是Scala編程語(yǔ)言的教程,由直接參與Scala開(kāi)發(fā)的人來(lái)編寫(xiě)。我們的目標(biāo)是讓讀者通過(guò)本書(shū),能夠了解和掌握成為高產(chǎn)的Scala程序員需要知道的一切。書(shū)中的所有示例均能通過(guò)Scala 3.0.0的編譯。 誰(shuí)讀本書(shū) 本書(shū)主要的目標(biāo)讀者是希望學(xué)習(xí)如何使用Scala編程的人。如果你想在你的下一個(gè)項(xiàng)目中使用Scala,本書(shū)就是為你準(zhǔn)備的。除此之外,本書(shū)對(duì)于那些想要學(xué)習(xí)新知識(shí)從而開(kāi)闊自己眼界的程序員也同樣有益。比方說(shuō),如果你是Java程序員,那么閱讀本書(shū),你將接觸到來(lái)自函數(shù)式編程領(lǐng)域和高階面向?qū)ο箢I(lǐng)域的許多概念。我們相信,通過(guò)學(xué)習(xí)Scala及Scala背后的觀念,你將成為一名更好的程序員。 我們假定你擁有常規(guī)的編程知識(shí)。雖然Scala作為用于入門(mén)的編程語(yǔ)言并沒(méi)有什么不妥,但是本書(shū)并不適用于(從零開(kāi)始)學(xué)習(xí)編程。 另一方面,閱讀本書(shū)并不要求讀者具備某項(xiàng)具體的編程語(yǔ)言的知識(shí)。我們當(dāng)中大部分人都是在Java平臺(tái)上使用Scala的,但本書(shū)并不假定你了解Java本身。不過(guò),我們預(yù)期大部分讀者都熟悉Java,因此我們有時(shí)會(huì)將Scala與Java做對(duì)比,幫助這些讀者理解它們之間的區(qū)別。 如何使用本書(shū) 本書(shū)的主旨是教學(xué),我們推薦的閱讀順序是從前到后,依次閱讀各章。我們盡可能每次只引入一個(gè)主題,同時(shí)只使用已經(jīng)介紹過(guò)的主題來(lái)解釋這個(gè)新的主題。因此,如果你跳過(guò)前面的章節(jié),則可能會(huì)遇到某些并不十分理解的概念。只要你按順序閱讀,就會(huì)發(fā)現(xiàn)掌握Scala是循序漸進(jìn)、順理成章的。 如果你看到某個(gè)不明白的詞匯,記得查看術(shù)語(yǔ)表。許多讀者都喜歡快速瀏覽特定的章節(jié),這沒(méi)有問(wèn)題,目錄能幫助你隨時(shí)找回閱讀的坐標(biāo)和方位。 當(dāng)你讀完本書(shū)以后,還可以繼續(xù)將其當(dāng)作語(yǔ)言參考書(shū)。Scala編程語(yǔ)言有一份正式的語(yǔ)言規(guī)范,但語(yǔ)言規(guī)范強(qiáng)調(diào)的是精確性,而不是可讀性。雖然本書(shū)不會(huì)覆蓋Scala的每一個(gè)細(xì)節(jié),但是它也足夠全面,應(yīng)該能夠在你逐漸成為Scala編程能手的過(guò)程中,承擔(dān)起語(yǔ)言參考書(shū)的職責(zé)。 如何學(xué)習(xí)Scala 通讀本書(shū),你可以學(xué)到很多關(guān)于Scala的知識(shí)。不過(guò),如果你做一些額外的嘗試,則可以學(xué)得更快,更徹底。 首先,利用好包含在本書(shū)中的代碼示例。手動(dòng)將這些代碼示例錄入,有助于在腦海中逐行過(guò)一遍代碼。尤其是在錄入過(guò)程中嘗試一些變化,會(huì)非常有趣,這也能讓你確信自己真的理解了它們背后的工作原理。 其次,時(shí)常訪問(wèn)在線論壇。這樣,你和其他Scala愛(ài)好者可以互相促進(jìn)。網(wǎng)上有大量的郵件列表、討論組、聊天室、Wiki和Scala特定主題的訂閱;ㄙM(fèi)一些時(shí)間,找到滿足你需求的內(nèi)容,你會(huì)在小問(wèn)題上花更少的時(shí)間,有更多的時(shí)間和精力投入更深入、更重要的問(wèn)題中。 后,一旦你讀得足夠多,就可以自己?jiǎn)?dòng)一個(gè)編程項(xiàng)目。例如,從頭編寫(xiě)小程序,或者為某個(gè)更大的項(xiàng)目開(kāi)發(fā)組件,因?yàn)閮H僅閱讀并不會(huì)讓你走得更遠(yuǎn)。 內(nèi)容概覽 第1章,一門(mén)可伸縮的語(yǔ)言,主要介紹Scala的設(shè)計(jì)及背后的概念和歷史。 第2章,Scala入門(mén),介紹了如何使用Scala完成一些基礎(chǔ)的編程任務(wù),但并不深入講解它是如何工作的。本章的目標(biāo)是讓你可以開(kāi)始輸入Scala代碼并執(zhí)行。 第3章,Scala入門(mén)(續(xù)),展示了更多基本的編程任務(wù),幫助你快速上手Scala。學(xué)習(xí)完本章以后,你應(yīng)該就能使用Scala完成簡(jiǎn)單的腳本型任務(wù)了。 第4章,類和對(duì)象,開(kāi)始深入介紹Scala,描述其基本的面向?qū)ο蟮慕M成部分,并指導(dǎo)大家如何編譯并運(yùn)行Scala應(yīng)用程序。 第5章,基本類型和操作,介紹了Scala基本類型、字面量和支持的操作,(操作符的)優(yōu)先級(jí)和結(jié)合律,以及對(duì)應(yīng)的富包裝類。 第6章,函數(shù)式對(duì)象,以函數(shù)式(即不可變)的分?jǐn)?shù)為例,更深入地講解Scala面向?qū)ο蟮奶匦浴?/p> 第7章,內(nèi)建的控制結(jié)構(gòu),展示了如何使用Scala內(nèi)建的控制結(jié)構(gòu):if、while、for、try和match。 第8章,函數(shù)和閉包,給出了對(duì)函數(shù)的深入介紹,而函數(shù)是函數(shù)式編程語(yǔ)言基本的組成部分。 第9章,控制抽象,展示了如何通過(guò)定義自己的控制抽象來(lái)對(duì)Scala基本的控制結(jié)構(gòu)進(jìn)行完善和補(bǔ)充。 第10章,組合和繼承,更進(jìn)一步探討Scala對(duì)面向?qū)ο缶幊痰闹С。本章的主題不像第4章那么基礎(chǔ),但在實(shí)踐中經(jīng)常會(huì)遇到。 第11章,特質(zhì),介紹了Scala的混入組合機(jī)制。本章展示了特質(zhì)的工作原理,描述了特質(zhì)的常見(jiàn)用法,并解釋了特質(zhì)相對(duì)于更傳統(tǒng)的多重繼承有哪些改進(jìn)。 第12章,包、引入和導(dǎo)出,討論了大規(guī)模編程實(shí)踐中我們會(huì)遇到的問(wèn)題,包括包,import語(yǔ)句,以及像protected和private那樣的訪問(wèn)控制修飾符。 第 13 章,樣例類和模式匹配,介紹了這組孿生的結(jié)構(gòu)。它們?cè)谔幚順?shù)形的遞歸數(shù)據(jù)時(shí)非常有用。 第14章,使用列表,詳細(xì)地解釋了列表這個(gè)在Scala程序中使用普遍的數(shù)據(jù)結(jié)構(gòu)。 第15章,使用其他集合類,展示了如何使用基本的Scala集合,如列表、數(shù)組、元組、集和映射。 第16章,可變對(duì)象,解釋了可變對(duì)象,以及Scala用來(lái)表示可變對(duì)象的語(yǔ)法。本章以一個(gè)具體的離散事件模擬案例分析收尾,展示了實(shí)踐中可變對(duì)象的適用場(chǎng)景。 第17章,Scala的繼承關(guān)系,解釋了Scala的繼承關(guān)系,并探討了通用方法和底類型等概念。 第18章,類型參數(shù)化,使用具體的示例解釋了第13章介紹過(guò)的信息隱藏的技巧:為純函數(shù)式隊(duì)列設(shè)計(jì)的類。本章接下來(lái)對(duì)類型參數(shù)的型變進(jìn)行了說(shuō)明,介紹了類型參數(shù)化對(duì)于信息隱藏的作用。 第 19 章,枚舉,介紹了枚舉和代數(shù)數(shù)據(jù)類型(ADT)這組孿生的結(jié)構(gòu),讓你更好地編寫(xiě)規(guī)則的、開(kāi)放式的數(shù)據(jù)結(jié)構(gòu)。 第20章,抽象成員,描述了Scala支持的各種抽象成員,不僅方法可以被聲明為抽象的,字段和類型也可以。 第21章,上下文參數(shù),介紹了Scala如何幫助你對(duì)函數(shù)使用上下文參數(shù)。將所有的上下文信息都直接帶入并不是什么難事,但會(huì)因此增加很多樣板代碼,上下文參數(shù)能幫助你減少一些樣板代碼。 第22章,擴(kuò)展方法,介紹了Scala如何讓一個(gè)在類定義之外的函數(shù)看起來(lái)像是類自己定義的那樣的機(jī)制。 第23章,類型族,展示了類型族的若干示例。 第24章,深入集合類,詳細(xì)介紹了Scala集合類庫(kù)。 第25章,斷言和測(cè)試,展示了Scala的斷言機(jī)制,并介紹了用Scala編寫(xiě)測(cè)試的若干工具,特別是ScalaTest。 Martin Odersky 是 Scala 編程語(yǔ)言的締造者。他是瑞士洛桑理工學(xué)院(EPFL)的教授,同時(shí)也是 Lightbend 的創(chuàng)始人。他的研究方向是編程語(yǔ)言和系統(tǒng),更具體地說(shuō),就是如何將面向?qū)ο蠛秃瘮?shù)式編程風(fēng)格有機(jī)地結(jié)合在一起。自 2001 年起,他的主要精力集中在設(shè)計(jì)、實(shí)現(xiàn)和改進(jìn) Scala 上。在此之前,他作為 Java 泛型的合作設(shè)計(jì)者參與了 Java 編程語(yǔ)言的開(kāi)發(fā),同時(shí)也是當(dāng)前 javac 參考實(shí)現(xiàn)的作者。他還是 ACM 院士。 Lex Spoon 是 Semmle Ltd. 的一名軟件工程師。作為博士后,他在 EPFL圍繞著 Scala 開(kāi)展了大約兩年的工作。他擁有 Georgia Tech 的博士學(xué)位,在那里他的主攻方向是動(dòng)態(tài)編程語(yǔ)言的靜態(tài)分析。除 Scala 外,他還幫助開(kāi)發(fā)了各類編程語(yǔ)言,包括動(dòng)態(tài)語(yǔ)言 Smalltalk、科學(xué)計(jì)算語(yǔ)言 X10,以及支撐 Semmle的邏輯編程語(yǔ)言。他和他的夫人一起生活在 Atlanta,他們有兩只貓和一只吉娃娃。 Bill Venners 是 Artima Inc.的總裁,Artima 開(kāi)發(fā)者網(wǎng)站的發(fā)行人,提供Scala 咨詢、培訓(xùn)、書(shū)籍和工具。他著有《深入 Java 虛擬機(jī)》,這是一本面向程序員講解 Java 平臺(tái)架構(gòu)和內(nèi)部實(shí)現(xiàn)原理的書(shū)。他在 JavaWorld 雜志上的專欄很受歡迎,主題涵蓋 Java 內(nèi)部實(shí)現(xiàn)、面向?qū)ο蟮脑O(shè)計(jì)和 Jini。Bill 是 ScalaCenter 咨詢委員會(huì)的社區(qū)代表,還是測(cè)試框架 ScalaTest 和針對(duì)函數(shù)式、面向?qū)ο缶幊填悗?kù) Scalactic 的主要開(kāi)發(fā)者和設(shè)計(jì)者。 Frank Sommers 是 Autospaces Inc.的創(chuàng)始人和總裁,該公司為金融服務(wù)行業(yè)提供自動(dòng)化的工作流解決方案。在過(guò)去的 12 年間,F(xiàn)rank Sommers 一直是活躍的 Scala 用戶,幾乎每天都在使用這門(mén)編程語(yǔ)言。
中文版審校者: 鐘倫甫,Scala愛(ài)好者和早期布道者。2012年在淘寶中間件團(tuán)隊(duì)任職技術(shù)專家期間,用Scala編寫(xiě)過(guò)一款名為HouseMD 的JVM診斷工具并開(kāi)源。后又作為聯(lián)合譯者,參與了《Scala函數(shù)式編程》一書(shū)的翻譯; 黃勝濤,有10年以上系統(tǒng)運(yùn)維和8年以上軟件開(kāi)發(fā)經(jīng)驗(yàn),曾就職于攜程旅行網(wǎng)、LOTTE,目前在上海昱極科技有限公司從事DevOps方面工作。 序 XIX
你還可能感興趣
我要評(píng)論
|