適讀人群 :本書適合有一定Java編程經驗、對Scala感興趣,并希望盡快掌握Scala核心概念和用法的開發者閱讀。
Scala擁抱函數式編程風格,又沒有拋棄面向對象的編程范式,可以編寫出比Java更精簡的程序。由于運行在JVM之上,可訪問任何Java類庫,能跟Java框架互操作,也更容易地發揮并發編程的威力。
《快學Scala(第2版)》介紹Scala那些能讓你快速上手干活兒的核心概念和技巧,卻并不試圖窮舉所有語言特性,也不會用冗長、過于機巧的示例來,而是仔細斟酌例子和練習,按照清晰定義的能力層級指引你成為專家。
* 快速熟悉Scala解釋器、語法、工具和獨有的使用習慣
* 掌握核心語言特性:函數、數組、映射、元組、包、引入、異常處理等
* 熟悉Scala面向對象編程:類、繼承和特質
* 使用Scala處理現實世界的編程任務:操作文件、正則表達式和XML
* 使用高階函數和功能強大的Scala集合類庫
* 利用Scala強大的模式匹配和樣例類
* 利用Scala的future構建并發程序
* 實現領域特定語言
* 理解Scala類型系統
* 應用高級的“強力工具”,如注解、隱式轉換和隱式參數、類型類等
譯 者 序
Scala是一門十分有趣又非常實用的語言,它以JVM為目標環境,將面向對象和函數式編程有機地結合在一起,帶來獨特的編程體驗。
它既有動態語言那樣的靈活簡潔,同時又保留了靜態類型檢查帶來的安全保障和執行效率,加上其強大的抽象能力,既能處理腳本化的臨時任務,又能處理高并發場景下的分布式互聯網大數據應用,可謂能縮能伸。
我大約是從2009年開始接觸Scala的。在此之前曾做過多年的Java開發,其間也陸陸續續接觸過JRuby、Groovy和Python,但沒有一門語言能像Scala這樣,讓我產生持續的興趣和熱情,讓我重新感受到學習、思考和解決問題的樂趣。Scala為我開了一扇窗,將我帶進了函數式編程的世界,在打破舊有思維模式的同時,讓我的整個計算機編程知識體系重組,看待很多技術問題的角度都不一樣了。這種感覺,不亞于我前些年接觸Linux。
Scala不光是一門值得用心學習的語言,同時也是一門可以直接上手拿來解決實際問題的語言。它跟Java的集成度很高,可以直接使用Java社區大量成熟的技術框架和方案。由于它直接編譯成Java字節碼,因此我們可以充分利用JVM這個高性能的運行平臺為我們提供的便利和保障。
目前國內外已經有很多公司和個人采用Scala來構建其平臺和應用。作為JVM上第一個獲得廣泛成功的非Java語言,Scala正以它 獨特的魅力吸引著越來越多人的熱情投入。
你手里的這本書,出自《Java核心技術》(Core Java)的作者Cay S. Horstmann。
書中每一章的篇幅都不長,娓娓道來,沁人心脾,適合有一定經驗的Java程序員閱讀。書中幾乎所有Scala相關的核心內容都有涉及,由淺入深,深入淺出,非常適合讀者快速上手。本書是原著第2版,針對Scala 2.12版進行了全面更新。
當然了,如果你想要用好Scala,想把它發揮到更高的層次,基本功必須扎實。這本書講的都是基本招式,看似平實無華,實則招招受用。對于一線開發人員,本書非常值得放在案頭反復揣摩練習。
廣大Scala愛好者們,這是為你們準備的書,希望你們也和我一樣,在Scala中找到樂趣,找到歸屬,你們是我完成本書翻譯的動力。
感謝Martin Odersky和他的團隊,為我們帶來如此美妙的編程語言;感謝電子工業出版社、張春雨編輯第一時間從國外引進這本書的第2版;感謝編輯團隊和其他幕后工作者的辛勤勞動;最后還要感謝我的家人,感謝你們的理解和支持。
在本書的翻譯過程中,譯者雖已盡力將原著的真實意思以符合中文習慣的方式呈現給大家,但畢竟能力有限,問題和疏漏在所難免,懇請各位讀者批評指正,聯系郵箱:gaoyuxiang.scala@gmail.com。
高宇翔
2017年于上海
第1版序
幾年前我和Cay Horstmann見面,他告訴我Scala需要一本更好的入門書。當時我自己的書才剛出來,因此我當然要問他覺得我那本書有哪里不好。他回答說,書很不錯,但就是太長了,他的學生們是不會有耐心讀完800頁的《Scala編程》(Programming in Scala)的。我認為他說得有一定道理。然后他就開始著力改變這個狀況,于是就有了這本《快學Scala》。
看到這本書終于完成我非常高興,因為它真切地印證了書名所表達的意思。這是一部快速實用的Scala入門指引,詳細解釋了Scala到底有什么特別,與Java的區別在哪里,如何克服學習中常見的困難,以及如何編寫優質的Scala代碼。
Scala是一門具備高度表達能力且十分靈活的語言。它讓類庫編寫者們可以使用非常精巧的抽象,以便類庫的使用者們可以簡單地、直觀地表達自己。因此,根據代碼種類的不同,它可以很簡單,也可以很復雜。
一年前,我曾試著通過一組用于Scala及其標準類庫的層級定義來對這個問題做一些澄清。首先按應用程序開發人員和類庫設計者分開,然后各自又分為三個層級。初級的內容可以很快被掌握并且足夠用于產出實際代碼。中級的內容可以使程序變得更加精簡、更加函數式,并且可以讓類庫使用起來更加靈活。而最高級的內容是為那些解決特定問題、處理特定任務的專家準備的。當時我這樣寫道:
我希望這個層級劃分有助于讓Scala的初學者決定以怎樣的順序來學習,并且能夠給教師和書籍作者一些建議,以怎樣的順序來呈現相關內容。
Cay的書是第一本系統化地采納這個想法的Scala入門書。每一章都相應地打上了層級標簽,讓你一目了然地知道該章的難易程度,以及它是面向類庫編寫者的還是面向應用程序開發人員的。
如你所預期的那樣,開始的章節是對基本的Scala功能的快速介紹。不過本書并不就此收手,接下來還涵蓋了許多“高級”概念,直到最后非常高端的內容,這些內容通常并不會出現在編程語言的入門指引當中,比如如何編寫解析器組合子,如何使用定界延續,等等。Cay令人欽佩地做到了讓哪怕是最高級的概念理解起來也那么簡單明了。
我非常喜歡《快學Scala》的構思,于是向Cay和他的編輯Greg Doench提出能否將本書基礎章節部分作為免費資料放在Typesafe網站上供大家下載。他們大方地答應了我的請求,對此我深表感謝。這樣一來,每個人都可以很快地獲取到這份在我看來是目前市面上最緊湊的Scala入門指南。
Martin Odersky
2012年1月
前 言
Java和C++的進化速度已經大不如前,那些樂于使用更現代的語言特性的程序員們正在將眼光移向他處。Scala是一個很有吸引力的選擇;事實上,在我看來,對于想要提升生產效率的程序員而言,Scala是最具吸引力的一個。Scala的語法十分簡潔,相比Java的樣板代碼,Scala讓人耳目一新。Scala運行于Java虛擬機之上,讓我們可以使用海量現成的類庫和工具。Scala并非只以Java虛擬機作為目標平臺。ScalaJS項目產出的是JavaScript代碼,讓你用一門不是JavaScript的語言同時編寫Web應用的服務端和客戶端。它在擁抱函數式編程的同時,并沒有廢棄面向對象,使你得以逐步了解和學習一種全新的編程范式。Scala解釋器讓你快速運行實驗代碼,這使得學習Scala的過程頗為輕松愜意。最后,同時也是很重要的一點是,Scala是靜態類型的,編譯器能夠幫助我們找出大部分錯誤,這樣就不至于要等到程序運行起來以后才發現(或未發現)這些錯誤,造成時間上的浪費。
本書是寫給那些對于立即開始Scala編程有急切渴望的讀者的。我假定你懂Java、C#或C++,并且我也不會去解釋變量、循環或類這些基本概念。我不去窮舉Scala的所有特性,不會宣傳某一種范式比另一種更優越,也不會用冗長的、過于機巧的示例來“折磨”你。與此相反,你將會以緊湊的篇幅得到你想要的信息,可以根據需要選擇閱讀和復習。
Scala是一門內容很豐富的語言,不過你并不需要知道它的所有細節,就已經可以有效地使用了。Scala的創始人Martin Odersky對應用程序開發工程師和類庫設計人員所需的專業知識技能的層級進行了定義。
對每一章(偶爾也針對特定的小節),我都標出了所需的經驗層級,大致的遞進順序是: A1 、L1 、A2 、L2 、A3 、L3 。就算你不打算設計自己的類庫,知道Scala向類庫設計人員提供了哪些工具對于更有效地使用類庫也會大有裨益。
這是本書的第2版,針對Scala 2.12做了全面的更新。我添加了對新近的Scala功能特性如字符串插值、動態調用、隱式類和future的介紹,并更新了所有章節來反映當下的Scala用法。
我希望你通過本書享受到學習Scala的樂趣。如果你發現了錯誤或者有任何改進建議,請訪問http://horstmann.com/scala并留言。在那里,你也能找到指向包含本書全部代碼示例的打包文件的鏈接。
在此特別感謝Dmitry Kirsanov和Alina Kirsanova將我的手稿從XHTML轉換成如此漂亮的排版樣式,讓我可以將注意力集中在內容而不是在格式調整上。每個作者都應享受這種待遇!
參與本書審稿的人員有:Adrian Cumiskey、Mike Davis、Rob Dickens、Steve Haines、Susan Potter、Daniel Sobral、Craig Tataryn、David Walend和William Wheeler。
非常感謝你們的評價和建議!
最后,一如既往,感謝我的編輯Greg Doench,感謝他對我撰寫本書的鼓勵和貫穿于整個過程當中的洞察力。
Cay S. Horstmann
2016年于舊金山
讀者服務
輕松注冊成為博文視點社區用戶(www.broadview.com.cn),掃碼直達本書頁面。
■ 提交勘誤:您對書中內容的修改意見可在提交勘誤處提交,若被采納,將獲贈博文視點社區積分(在您購買電子書時,積分可用來抵扣相應金額)。
■ 交流互動:在頁面下方讀者評論處留下您的疑問或觀點,與我們和其他讀者一同學習交流。
頁面入口:http://www.broadview.com.cn/31995