發表於2024-12-26
《Scala編程(第3版)》是一份Scala編程語言的教程書。書中包含有很多編程例子,這些例子簡便易懂易學,你如果認真讀下去此書,本書將以一步一個腳印的方式引導你順利地獲得Scala軟件開發的能力。通過閱讀此書,你能夠獲得你所需的,並成為一個多産的Scala程序員。本書還可作為一份語言參考書。Scala語言有一個正式的定義,但是語言的定義是以可讀性為代價要求精確性的文檔。盡管本書並未涵蓋Scala的所有細節,但它在你更好地掌控Scala編程之前,作為一本平易近人的語言參考書已足夠全麵。
本書由直接參與Scala開發的一綫人員編寫,因而對原理的解讀和應用的把握更加值得信賴。本書麵嚮具有一定編程經驗的開發者,目標是讓讀者能夠全麵瞭解和掌握Scala編程語言的核心特性,並能夠深入理解Scala這門語言在設計取捨背後的動因。即便是不直接使用Scala或從事一綫編程工作的讀者,也能從本書學到大量關於函數式和麵嚮對象的編程概念和技巧。
Martin Odersky 是Scala 編程語言的締造者。他是瑞士洛桑理工學院(EPFL)的教授,同時也是Typesafe, Inc.(已更名為Lightbend)的創始人。他的研究方嚮是編程語言和係統,更具體地說,就是如何將麵嚮對象和函數式編程風格有機地結閤在一起。自2001 年起,他的主要精力集中在設計、實現和改進Scala 上。在此之前,他作為Java 泛型的閤作設計者參與瞭Java 編程語言的開發,同時也是當前javac 參考實現的作者。他還是ACM 院士。Lex Spoon 是Semmle Ltd. 的一名軟件工程師。他在EPFL 作為博士後圍繞著Scala 開展瞭兩年的工作。他擁有Georgia Tech 的博士學位,在那裏他的主攻方嚮是動態編程語言的靜態分析。除Scala 外,他還幫助開發瞭各類編程語言,包括動態語言Smalltalk、科學計算語言X10,以及支撐Semmle 的邏輯編程語言。他和他的夫人一起生活在Atlanta,他們有兩隻貓和一隻吉娃娃。Bill Venners 是Artima Inc. 的主席,Artima 開發者網站(ww.artima.com)的發行人,以及Escalate Software, LLC 的聯閤創始人。他著有《Inside theJava Virtual Machine》,這是一本麵嚮程序員講解Java 平颱架構和內部實現原理的書。他在《JavaWorld》雜誌上的專欄很受歡迎,主題涵蓋Java 內部實現、麵嚮對象的設計和Jini。Bill 從Jini 社區創立之初便十分活躍,領導瞭Jini 社區的ServiceUI 項目,其API 成為Jini 服務事實上的UI 標準。他還是ScalaTest 的主要開發者和設計者,一個麵嚮Scala 和Java 開發者的開源測試工具。
高宇翔,資深軟件開發工程師和係統架構師,同時也是Scala在國內的早期布道者和實踐者,曾譯有《快學Scala(第2版)》、《快學Scala》(第1版)和《Scala編程》(第1版)等專業書籍。
推薦序
這本書可以說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編程(第3版) 下載 mobi pdf epub txt 電子書 格式 2024
Scala編程(第3版) 下載 mobi epub pdf 電子書不錯~挺好的~便宜~物流快~
評分大厚本啊,scala好像都不流行瞭
評分質量非常好,與賣傢描述的完全一緻,非常滿意,真的很喜歡,完全超齣期望值,發貨速度非常快,包裝非常仔細、嚴實,物流公司服務態度很好,運送速度很快,很滿意的一次購物。
評分看彆人評價 高大上啊 講得好 慢慢學瞭
評分厚厚的一本全麵詳細的講解scala的書。
評分書不錯,等瞭好久終於齣來一段
評分很厚的一大本,字也大,正品
評分京東購物 方便快捷 價格閤適
評分書很好,好好學習,天天嚮上
Scala編程(第3版) mobi epub pdf txt 電子書 格式下載 2024