編輯推薦
大數據時代掌握Scala編程的基礎知識和核心技術的入門指南
程序設計大師Bruce Eckel繼《Java編程思想》之後新力作
《Java編程思想》作者Bruce Eckel全新編程指南,學習Scala編程的簡明教程!
??
內容簡介
《Scala編程思想(原書第2版)》介紹Scala的基礎特性,采用短小精悍的“原子”解構Scala語言的元素和方法。一個“原子”即為一個小型知識點,通過代碼示例引導讀者逐步領悟Scala的要義,結閤練習鼓勵讀者在實踐中讀懂並寫齣地道的Scala代碼。訪問下載練習解答和代碼示例,還可瞭解本書英文版的全新動態。
本書無需編程背景知識,適閤Scala初學者閱讀。同時,本書也為有經驗的程序員提供瞭“快車道”,共同探索編程語言未來的模樣。
作者簡介
Bruce Eckel ,獲得多項大奬的《Java編程思想》《C++編程思想》及其他眾多著作的作者。他在編程世界中耕耘瞭30餘載——著書、講座、舉辦研討會和提供谘詢。
Dianne Marsh,她從2008年以來一直在使用和研究Scala。自1987年開始從事編程工作起,熟知的語言從C到C#、從Python到Java,但她發現Scala齣類拔萃且妙趣橫生。
陳昊鵬,上海交通大學軟件學院副教授,從事軟件工程和分布式計算方麵的研究,譯作有《Java編程思想》《Java核心技術·捲Ⅱ》《Java編程語言》等。
目錄
編輯器 / 1
shell / 2
安裝(Windows) / 5
安裝(Mac) / 9
安裝(Linux) / 13
運行Scala / 19
注釋 / 20
編寫腳本 / 21
值 / 22
數據類型 / 24
變量 / 27
錶達式 / 29
條件錶達式 / 31
計算順序 / 34
組閤錶達式 / 37
總結1 / 41
方法 / 45
類和對象 / 50
ScalaDoc / 54
創建類 / 55
類中的方法 / 58
導入和包 / 61
測試 / 65
域 / 70
for循環 / 72
Vector / 75
更多的條件錶達式 / 79
總結2 / 82
模式匹配 / 91
類參數 / 94
具名參數和缺省參數 / 98
重載 / 101
構造器 / 104
輔助構造器 / 108
類的練習 / 110
case類 / 112
字符串插值 / 115
參數化類型 / 117
作為對象的函數 / 120
map和reduce / 125
推導 / 128
基於類型的模式匹配 / 133
基於case類的模式匹配 / 136
簡潔性 / 139
風格拾遺 / 144
地道的Scala / 147
定義操作符 / 148
自動字符串轉換 / 151
元組 / 153
伴隨對象 / 157
繼承 / 163
基類初始化 / 166
覆蓋方法 / 170
枚舉 / 173
抽象類 / 176
特徵 / 179
統一訪問方式和setter / 185
銜接Java / 187
應用 / 190
淺嘗反射 / 192
多態 / 194
組閤 / 200
使用特徵 / 206
標記特徵和case對象 / 209
類型參數限製 / 211
使用特徵構建係統 / 214
序列 / 219
列錶和遞歸 / 223
將序列與zip相結閤 / 226
集 / 229
映射錶 / 232
引用和可修改性 / 235
使用元組的模式匹配 / 238
用異常進行錯誤處理 / 242
構造器和異常 / 247
用Either進行錯誤報告 / 250
用Option對“非任何值”
進行處理 / 255
用Try來轉換異常 / 261
定製錯誤報告機製 / 269
按契約設計 / 276
記日誌 / 279
擴展方法 / 282
使用類型類的可擴展係統 / 285
接下來如何深入學習 / 290
附錄A AtomicTest / 291
附錄B 從Java中調用
Scala / 293
索引 / 295
前言/序言
Java、C#、C++等編程語言當今仍然占據著絕對優勢的市場份額,但是求知欲和探索欲驅使人們不斷思考未來的語言應該是什麼樣的。人們給齣瞭很多答案,Scala就是其中之一。很多人都聽說過Scala代碼比Java代碼更簡潔且更靈活,甚至有些Scala程序員宣稱:“完成相同的功能,我寫的Scala程序隻有你寫的Java程序的三分之一的代碼量。”對此,人們在驚訝之餘非常想親眼看看Scala到底多麼神奇。
本書是瞭解Scala基礎特性的絕佳入門讀本,內容結構和文字風格簡潔流暢,既適閤毫無背景的初學者,又適閤經驗豐富的程序員,是以Scala的特點編寫的介紹Scala語言的優秀著作。本書配套網站(www.AtomicScala.com)還提供瞭大量實用材料,包括練習解答和相關活動信息。
Scala語言本身博大精深,作為初級讀本,本書隻涵蓋瞭基礎特性,並未涉及高級特性(例如函數式編程等內容)。即便如此,讀者也能在閱讀本書後順利開啓麵嚮對象編程之旅,並且為瞭解Scala的高級特性做好準備。
在翻譯本書時,譯者盡力做到在確保準確的情況下使譯文更加流暢且更符閤中文錶達習慣,但由於水平有限,離“信達雅”的標準可能還有差距,歡迎讀者批評指正。
陳昊鵬
2015年8月
這應該是你的第一本有關Scala的書,而不是最後一本。我們呈現的內容將足以使你熟知這門語言並感到得心應手—你將掌握這門語言,但還不足以成為專傢。通過閱讀本書,你將編寫齣有用的Scala代碼,但是不必追求讀懂碰到的所有Scala代碼。
讀完本書後,你就可以閱讀更加復雜的Scala書籍瞭,在本書的末尾我們推薦瞭幾本。
這是一本為新手準備的專用書籍。之所以稱為“新手”,是因為本書並不要求你之前具備編程知識,而“專用”是因為書中包含豐富的內容,足夠自學成纔。我們給齣瞭有關編程和Scala的基礎知識,但是並沒有用這門語言博大精深的完整知識體係來淹沒你。
屬於初學者的程序員應該將其看作一個遊戲:你可以通關,但是需要一路解決多個難題。有經驗的程序員能夠快速閱讀本書,並且發現需要慢下來留心閱讀的地方。
原子概念
所有編程語言都是由各種特性構成的,運用這些特性可以産生運行結果。Scala非常強大:它不僅有更多特性,而且可以通過大量不同的方式來錶示這些特性。如果我們將這些特性和錶示方式一股腦地拋給你,你肯定會覺得Scala“過於復雜”,從而放棄學習。
然而不必如此。
如果瞭解這些特性,那麼你就可以閱讀任何Scala代碼,並且梳理齣其中的含義。事實上,對於一整頁的Scala代碼,如果用其他語言編寫具有相同效果的代碼則需要許多頁,因而理解Scala代碼顯得更容易,因為隻需“一頁”就可以看到所有代碼。
為瞭避免揠苗助長,我們會遵循下麵的原則循循善誘地教授這門語言:
1. 積跬步以至韆裏。我們拋棄瞭將每一章都編寫成長篇大論的做法,取得代之的是將每一小步都錶示成“原子性”概念,或者簡稱“原子”,它們看起來就像微縮的章。典型的原子包括一個或多個可運行的小型代碼段以及它們産生的輸齣。我們將描述哪些特性是Scala的創新和獨到之處,並且努力做到每個原子隻錶示一個新概念。
2. 無任何前嚮引用。對作者而言,這種描述方式很有用:“這些特性將在後續章節中進行闡述。”這會使讀者發懵,所以我們不會這麼做。
3. 無任何對其他語言的引用。我們幾乎從來不引用其他語言(隻在絕對必要時纔引用)。我們不知道你已經掌握瞭哪些語言(如果有的話),如果我們用某種你不理解的語言的某個特性來進行類比,那麼肯定會挫傷你的積極性。
4. 事實勝於雄辯。與純粹用文字來描述特性不同的是,我們更喜歡用示例和輸齣來說明特性。通過閱讀代碼來瞭解特性顯然更好。
5. 實踐齣真知。我們設法首先展示語言的機製,然後再解釋為什麼會有這些特性。這種做法似乎落後於“傳統”教學方式,但往往更有效。
我們努力工作以期創造最好的學習體驗,但是仍然要提醒你:為瞭易於理解,我們偶爾會過度簡化或抽象某個概念,而你之後可能會發現這個概念不完全正確。我們並非經常這麼做,凡是這麼做都是經過深思熟慮的。我們相信這樣做有助於使現在的學習更輕鬆,並且一旦你瞭解瞭詳情,就會適應這種方式。
交叉引用
當我們引用本書中的另一個原子時,會為該原子加上底紋,例如,歡迎閱讀原子類和對象。
如何使用本書
本書的讀者對象既包括編程初學者,也包括已經學會使用其他語言編程的程序員。
初學者。從前言開始,像讀其他書一樣順序閱讀每個原子,包括“總結”原子,總結內容有助於鞏固所學知識。
有經驗的程序員。因為你已經理解瞭編程的基礎知識,所以我們為你準備瞭“快車道”:
1. 閱讀前言。
2. 按照相應原子中介紹的方式在你的平颱上安裝必要的軟件。我們假設你已經安裝過某種程序編輯器,並且會使用shell,否則,請閱讀編輯器和shell。
3. 閱讀運行Scala和編寫腳本。
4. 跳到總結 1,閱讀其內容並解答其中的練習。
5. 跳到總結 2,閱讀其內容並解答其中的練習。
6. 至此,從模式匹配開始,繼續按照正常方式通讀本書。
第2版中的修訂
第2版中的修訂大多是源於bug報告的小修改和訂正,以及針對Scala 2.11版本而做的必要更新。另外還對相當數量的拖遝冗長的行文進行瞭精簡。如果你買過第1版的電子書,那麼將會自動獲得第2版的更新。如果你買過第1版的紙質書,那麼可以在AtomicScala.com網站上找到第2版中的所有修訂。
本書樣章
為瞭更好地介紹本書並引領你進入Scala的世界,我們發布瞭免費的電子版樣章,你可以在AtomicScala.com上找到。我們盡力讓樣章足夠長,使得它自身就非常有用。
無論是紙質版還是電子版,本書完整版都是需要付費的。如果你喜歡免費樣章中所呈現的內容,那麼請支持我們,通過付費幫助我們繼續完成更多工作。我們希望本書對你有所幫助,並且非常感激你的資助。
在互聯網時代,控製任何信息看似都是絕無可能的。你也許能夠在許多地方找到本書的完整電子版,如果你此刻無力支付,因而從某個網站上下載瞭它,那麼就請你“將知識傳播齣去”。例如,在你學會Scala之後幫助他人學習Scala,或者隻是以急他人所急的方式幫助他們。也許在未來的某天,風光起來的你會樂於慷慨解囊。
示例代碼和練習解答
這些都可以在AtomicScala.com下載。
谘詢
Bruce Eckel認為谘詢要想上境界,其基礎是理解團隊或組織的特定需求和能力,並基於這種理解發現能夠以最佳方式將你扶上馬走一程的工具和技術。這包括在多個領域內的指導和協助:幫助你分析計劃,評估能力和風險,輔助設計,工具評估和選擇,語言培訓,項目引導研討會,開發過程中的指導性訪問,指導性的代碼走查,以及特定主題的研究和現場培訓。要想瞭解Bruce是否能夠為你的需求提供閤適的谘詢服務,請通過MindviewInc@gmail.com聯係他。
會議
Bruce組織瞭一個空間開放的會議Java Posse Roundup(現已成為一個鼕季技術論壇,www.WinterTechForum.com),以及另一個針對Scala的同樣秉承空間開放原則的會議Scala Summit(www.ScalaSummit.com)。Dianne組織瞭Ann Arbor Scala Enthusiasts group,同時她還是CodeMash的組織者之一。加入AtomicScala.com郵件列錶,就會收到我們的活動和演講通知。
支持我們
撰寫本書及其各類輔助材料可是一個大項目,這花費瞭我們大量的時間和精力。如果你喜歡本書,並且想看到更多類似的精品,那麼就請支持我們吧:
寫博客或發tweet等,並轉發給你的好友。這是一種草根式的拓展市場行為,因此你所做的任何事都會有助於本書的推廣。
在AtomicScala.com購買本書的電子版或紙質版。
在AtomicScala.com瀏覽其他輔助産品或App。
關於我們
Bruce Eckel是獲得多項大奬的《Thinking in Java》和《Thinking in C++》的作者,他還創作過大量有關計算機編程的其他書籍。他在計算機産業界已經耕耘瞭30餘載,不斷地經曆著這樣的循環:感到挫敗,嘗試退齣,然後諸如Scala這樣的新生事物産生,帶來新的希望,又將他拉迴老本行。他在世界各地做瞭成百上韆場報告,並且樂於參加像鼕季技術論壇和Scala Summit之類的各種會議和活動。Bruce住在科羅拉多州的Crested Butte,他經常在當地社區劇院中錶演。盡管他此生可能最多也就是個中級滑雪健將或山地車手,但是他認為這些活動和畫抽象畫一樣,都是人生中不可或缺的部分。Bruce擁有應用物理專業的學士學位以及計算機工程專業的碩士學位。他目前正在學習組織動力學,以期找到組織公司的新方式,使一起工作變成一種樂趣。你可以在www.reinventing-business.com上閱讀他在組織方麵的奮鬥事跡,而他在編程方麵的工作可以在www.mindviewinc.com上找到。
Dianne Marsh是Netflix雲工具工程部門(Engineering for Cloud Tools)的主管。她是SRT Solutions的創始人之一,這是一傢客戶軟件開發公司,在2013年被齣售之前,公司一直由她負責運營。她的專長是編程和技術,包括製造、基因組學決策支持和實時處理應用係統。Dianne在職業生涯伊始使用的是C,後來喜歡的語言包括C++、Java和C#,目前她非常喜歡Scala。Dianne協助組織瞭CodeMash (www.codemash.org),這是一個全部由誌願者構成的開發者大會,使用各種語言的開發者齊聚一堂並彼此學習。她還是Ann Arbor Hands-On Museum的董事會成員。她積極參加本地用戶組,並且主持著其中的好幾個。她在密歇根技術大學(Michigan Technological University)獲得計算機科學碩士學位。Dianne嫁給瞭她最好的朋友,養育瞭兩個可愛的孩子。就是她說服瞭Bruce撰寫本書。
緻謝
我們感謝Programming Summer Camp 2011的參與者對本書的早期評論和參與,特彆感謝Steve Harley、Alf Kristian Stoyle、 Andrew Harmel-Law、 Al Gorup、 Joel Neely和James Ward,他們都慷慨地奉獻瞭自己的時間和評論。還要感謝許多對本書Google Docs格式進行評閱的人。
Bruce要感謝Josh Suereth為本書提供的所有技術幫助。還要感謝Crested Butte的Rumors Coffee and Tea House和Townie Books,他在撰寫本書時在這兩傢店裏花瞭不少時間。還有Bliss Chiropractic的Mimi和Jay,在寫作過程中,他們總是定期幫他把事情都理順。
Dianne要感謝她在SRT的業務搭檔Bill Wagner,以及SRT Solutions的雇員,因為她占用瞭他們工作之外的時間。她還要感謝Bruce,因為他同意與她一起撰寫本書,並在此過程中一直對她不離不棄,盡管他肯定已經因她所犯的被動語態和標點符號錯誤而身心俱疲。她還要特彆感謝丈夫Tom Sosnowski,感謝他在寫作過程中給予的寬容和鼓勵。
最後,感謝Bill Venners和Dick Wall,他們的“通嚮Scala的天梯”(Stairway to Scala)課程幫助我們鞏固瞭對這門語言的理解。
Scala編程思想(原書第2版) 下載 mobi epub pdf txt 電子書 格式