|
-- 會員 / 註冊 --
|
|
|
|
快學Scala(第2版) ( 簡體 字) |
作者:高宇翔 | 類別:1. -> 程式設計 -> Scala |
譯者: |
出版社:電子工業出版社 | 3dWoo書號: 47220 詢問書籍請說出此書號!【缺書】 NT售價: 540 元 |
出版日:7/1/2017 |
頁數:412 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787121319952 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:譯 者 序 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年于舊金山
|
內容簡介:Scala是一門主要以Java虛擬機(JVM)為目標運行環境并將面向對象和函數式編程語言的最佳特性結合在一起的編程語言。你可以使用Scala編寫出更加精簡的程序,同時充分利用并發的威力。由于Scala默認運行于JVM之上,因此它可以訪問任何Java類庫并且與Java框架進行互操作。通過ScalaJS項目,Scala還可以被編譯成JavaScript代碼,讓我們更便捷高效地開發Web應用。本書從實用角度出發,給出了一份快速的、基于代碼的入門指南。Horstmann以“博客文章大小”的篇幅介紹了Scala的概念,讓你可以快速地掌握和應用。實際上手的操作,清晰定義的能力層次,從初級到專家級,全程指導。適合有一定的Java編程經驗、對Scala感興趣,并希望盡快掌握Scala核心概念和用法的開發者閱讀。 |
目錄:譯者序 V 第1版序 XVII 前言 XIX 作者簡介 XXIII 第1章 基礎 A1 1 1.1 Scala解釋器 1 1.2 聲明值和變量 4 1.3 常用類型 5 1.4 算術和操作符重載 7 1.5 關于方法調用 8 1.6 apply方法 9 1.7 Scaladoc 11 練習 16 第2章 控制結構和函數 A1 19 2.1 條件表達式 20 2.2 語句終止 22 2.3 塊表達式和賦值 22 2.4 輸入和輸出 23 2.5 循環 25 2.6 高級for循環 27 2.7 函數 28 2.8 默認參數和帶名參數 L1 29 2.9 變長參數 L1 29 2.10 過程 31 2.11 懶值 L1 31 2.12 異常 32 練習 35 第3章 數組相關操作 A1 39 3.1 定長數組 39 3.2 變長數組:數組緩沖 40 3.3 遍歷數組和數組緩沖 41 3.4 數組轉換 42 3.5 常用算法 44 3.6 解讀Scaladoc 45 3.7 多維數組 47 3.8 與Java的互操作 48 練習 49 第4章 映射和元組 A1 53 4.1 構造映射 53 4.2 獲取映射中的值 54 4.3 更新映射中的值 55 4.4 迭代映射 56 4.5 已排序映射 57 4.6 與Java的互操作 57 4.7 元組 58 4.8 拉鏈操作 59 練習 60 第5章 類 A1 63 5.1 簡單類和無參方法 63 5.2 帶getter和setter的屬性 64 5.3 只帶getter的屬性 67 5.4 對象私有字段 68 5.5 Bean屬性 L1 69 5.6 輔助構造器 71 5.7 主構造器 72 5.8 嵌套類 L175 練習 78 第6章 對象 A1 81 6.1 單例對象 81 6.2 伴生對象 82 6.3 擴展類或特質的對象 83 6.4 apply方法 84 6.5 應用程序對象 85 6.6 枚舉 86 練習 87 第7章 包和引入 A1 91 7.1 包 91 7.2 作用域規則 93 7.3 串聯式包語句 95 7.4 文件頂部標記法 95 7.5 包對象 96 7.6 包可見性 97 7.7 引入 97 7.8 任何地方都可以聲明引入 98 7.9 重命名和隱藏方法 99 7.10 隱式引入 99 練習 100 第8章 繼承 A1 103 8.1 擴展類 103 8.2 重寫方法 104 8.3 類型檢查和轉換 105 8.4 受保護字段和方法 106 8.5 超類的構造 106 8.6 重寫字段 107 8.7 匿名子類 109 8.8 抽象類 109 8.9 抽象字段 110 8.10 構造順序和提前定義 L3 110 8.11 Scala類繼承關系 112 8.12 對象相等性 L1 114 8.13 值類 L2 116 練習 117 第9章 文件和正則表達式 A1 121 9.1 讀取行 121 9.2 讀取字符 122 9.3 讀取詞法單元和數字 123 9.4 從URL或其他源讀取 124 9.5 讀取二進制文件 124 9.6 寫入文本文件 124 9.7 訪問目錄 125 9.8 序列化 125 9.9 進程控制 A2126 9.10 正則表達式 129 9.11 正則表達式組 130 練習 131 第10章 特質 A1135 10.1 為什么沒有多重繼承 135 10.2 當作接口使用的特質 137 10.3 帶有具體實現的特質 138 10.4 帶有特質的對象 139 10.5 疊加在一起的特質 140 10.6 在特質中重寫抽象方法 141 10.7 當作富接口使用的特質 142 10.8 特質中的具體字段 143 10.9 特質中的抽象字段 144 10.10 特質構造順序 145 10.11 初始化特質中的字段 147 10.12 擴展類的特質 148 10.13 自身類型 L2 149 10.14 背后發生了什么 151 練習 152 第11章 操作符 A1157 11.1 標識符 157 11.2 中置操作符 158 11.3 一元操作符 159 11.4 賦值操作符 160 11.5 優先級 161 11.6 結合性 162 11.7 apply和update方法 162 11.8 提取器 L2 164 11.9 帶單個參數或無參數的提取器 L2166 11.10 unapplySeq方法 L2167 11.11 動態調用 L2 167 練習 171 第12章 高階函數 L1 175 12.1 作為值的函數 175 12.2 匿名函數 177 12.3 帶函數參數的函數 178 12.4 參數(類型)推斷 179 12.5 一些有用的高階函數 180 12.6 閉包 181 12.7 SAM轉換 182 12.8 柯里化 183 12.9 控制抽象 185 12.10 return表達式 186 練習 187 第13章 集合 A2191 13.1 主要的集合特質 192 13.2 可變和不可變集合 193 13.3 序列 195 13.4 列表 196 13.5 集 197 13.6 用于添加或去除元素的操作符 198 13.7 常用方法 201 13.8 將函數映射到集合 203 13.9 化簡、折疊和掃描 A3 205 13.10 拉鏈操作 209 13.11 迭代器 210 13.12 流 A3 211 13.13 懶視圖 A3 213 13.14 與Java集合的互操作 213 13.15 并行集合 215 練習 217 第14章 模式匹配和樣例類 A2 221 14.1 更好的switch 222 14.2 守衛 223 14.3 模式中的變量 223 14.4 類型模式 224 14.5 匹配數組、列表和元組 225 14.6 提取器 227 14.7 變量聲明中的模式 227 14.8 for表達式中的模式 229 14.9 樣例類 229 14.10 copy方法和帶名參數 230 14.11 case語句中的中置表示法 231 14.12 匹配嵌套結構 232 14.13 樣例類是邪惡的嗎 233 14.14 密封類 234 14.15 模擬枚舉 235 14.16 Option類型 235 14.17 偏函數 L2 236 練習 238 第15章 注解 A2243 15.1 什么是注解 243 15.2 什么可以被注解 244 15.3 注解參數 245 15.4 注解實現 246 15.5 針對Java特性的注解 247 15.5.1 Java修飾符 247 15.5.2 標記接口 248 15.5.3 受檢異常 249 15.5.4 變長參數 249 15.5.5 JavaBeans 250 15.6 用于優化的注解 250 15.6.1 尾遞歸 .250 15.6.2 跳轉表生成與內聯 252 15.6.3 可省略方法 253 15.6.4 基本類型的特殊化 254 15.7 用于錯誤和警告的注解 255 練習 256 第16章 XML處理 A2 259 16.1 XML字面量 260 16.2 XML節點 260 16.3 元素屬性 262 16.4 內嵌表達式 263 16.5 在屬性中使用表達式 264 16.6 特殊節點類型 265 16.7 類XPath表達式 266 16.8 模式匹配 267 16.9 修改元素和屬性 268 16.10 XML變換 269 16.11 加載和保存 270 16.12 命名空間 273 練習 275 第17章 Future A2 277 17.1 在future中運行任務 278 17.2 等待結果 280 17.3 Try類 281 17.4 回調 282 17.5 組合future任務 283 17.6 其他future變換 286 17.7 Future對象中的方法 288 17.8 Promise 289 17.9 執行上下文 291 練習 292 第18章 類型參數 L2 297 18.1 泛型類 298 18.2 泛型函數 298 18.3 類型變量界定 298 18.4 視圖界定 300 18.5 上下文界定 301 18.6 ClassTag上下文界定 301 18.7 多重界定 302 18.8 類型約束 L3302 18.9 型變 304 18.10 協變和逆變點 305 18.11 對象不能泛型 307 18.12 類型通配符 308 練習 309 第19章 高級類型 L2 313 19.1 單例類型 313 19.2 類型投影 315 19.3 路徑 316 19.4 類型別名 317 19.5 結構類型 318 19.6 復合類型 319 19.7 中置類型 320 19.8 存在類型 321 19.9 Scala類型系統 322 19.10 自身類型 323 19.11 依賴注入 325 19.12 抽象類型 L3 327 19.13 家族多態 L3 329 19.14 高等類型 L3 333 練習 336 第20章 解析 A3 341 20.1 文法 342 20.2 組合解析器操作 343 20.3 解析器結果變換 345 20.4 丟棄詞法單元 347 20.5 生成解析樹 348 20.6 避免左遞歸 348 20.7 更多的組合子 350 20.8 避免回溯 352 20.9 記憶式解析器 353 20.10 解析器說到底是什么 354 20.11 正則解析器 355 20.12 基于詞法單元的解析器 356 20.13 錯誤處理 358 練習 359 第21章 隱式轉換和隱式參數 L3. 363 21.1 隱式轉換 363 21.2 利用隱式轉換豐富現有類庫的功能 364 21.3 引入隱式轉換 365 21.4 隱式轉換規則 367 21.5 隱式參數 368 21.6 利用隱式參數進行隱式轉換 370 21.7 上下文界定 371 21.8 類型類 372 21.9 類型證明 374 21.10 @implicitNotFound注解 376 21.11 CanBuildFrom解讀 376 練習 379 詞匯表 381 |
序: |
|