Kotlin實戰

Kotlin實戰 pdf epub mobi txt 電子書 下載 2025

[美] Dmitry Jemerov(德米特裏·詹莫瑞福),[美] Svetlana Isakova(斯維特拉娜·伊凡諾沃) 著,覃宇,羅麗,李思陽,蔣揚海 譯
圖書標籤:
  • Kotlin
  • 編程
  • Android
  • 移動開發
  • 函數式編程
  • 實用指南
  • 代碼示例
  • 開發技巧
  • JetBrains
  • 現代開發
想要找書就要到 靜流書站
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 電子工業齣版社
ISBN:9787121321580
版次:1
商品編碼:12224904
品牌:Broadview
包裝:平裝
開本:16開
齣版時間:2017-08-01
用紙:膠版紙
頁數:360

具體描述

編輯推薦

  

  《Kotlin 實戰》教會你使用 Kotlin 語言來開發達到産品級品質的應用。《Kotlin 實戰》為具備一定 Java 經驗的開發者編寫,包含瞭豐富的示例,和大多數介紹編程語言的書籍相比更加深入,涵蓋瞭非常有趣的話題,例如怎樣構建使用自然語言語法的 DSL。兩位作者是 Kotlin 的核心開發者,所以你完全可以相信《Kotlin 實戰》中細枝末節的內容都無比地精確。

  ● 在 JVM 上進行函數式編程

  ● 編寫整潔並符閤語義習慣的代碼

  ● 結閤運用 Kotlin 和 Java

  ● 領域特定語言


  

內容簡介

  

  《Kotlin實戰》將從語言的基本特性開始,逐漸覆蓋其更多的高級特性,尤其注重講解如何將 Koltin 集成到已有 Java 工程實踐及其背後的原理。《Kotlin實戰》分為兩個部分。第一部分講解如何開始使用 Kotlin 現有的庫和API,包括基本語法、擴展函數和擴展屬性、數據類和伴生對象、lambda 錶達式,以及數據類型係統(著重講解瞭可空性和集閤的概念)。第二部分教你如何使用 Kotlin 構建自己的 API,以及一些深層次特性——約定和委托屬性、高階函數、泛型、注解和反射,以及領域特定語言的構建。本書適閤廣大移動開發者及入門學習者,尤其是緊跟主流趨勢的前沿探索者。

作者簡介

  原著作者簡介

  本書作者JetBrains為Kotlin的核心開發者,DmitryJemerov從2003年起就在JetBrains工作並參與瞭許多産品的開發,包括IntelliJIDEA、PyCharm和WebStorm。他是Kotlin早的貢獻者之一,創建瞭初版本的KotlinJVM字節碼生成器,並且還在世界各地的活動上做瞭很多關於Kotlin的演示。之前他帶領瞭進軍KotlinIntelliJIDEA插件開發的團隊。SvetlanaIsakova從2011年成為Kotlin團隊的一員。她從事編譯器類型推導和重載解析該係統的工作。現在她是一名技術布道者,在各種會議上進行Kotlin相關討論並從事Kotlin在綫課程的相關工作。

  

  譯者簡介

  覃宇,ThoughtWorks高級谘詢師,10餘年移動應用開發經驗,Android技術專傢,曾為AOSP貢獻過測試用例;目前專注於移動應用的架構設計、自動化測試以及持續交付。

  羅麗,高級軟件工程師,移動技術開發顧問,擁有豐富的軟件開發經驗,熟悉ReactNative,Android,iOS等多種開發技術。目前任職於ThoughtWorks海外事業部,曾在多個大型移動應用項目中擔任技術顧問。

  李思陽,ThoughtWorks谘詢師,移動開發工程師。熟悉Android、MobileWeb相關技術,有著豐富的移動應用開發經驗,在移動應用體驗和兼容性相關領域有獨特的見解;長期關注Android領域相關技術動嚮。

  蔣揚海,ThoughtWorks移動開發谘詢師,深耕Android開發多年,應用開發經驗豐富,對Android開發領域的技術有廣泛的涉獵,對Android技術動嚮有著敏銳的洞察力。


精彩書評

  

  開發者想完成他們的工作——同時越省事越好。使用 Kotlin 編碼就意味著省事。Kotlin 編程語言提供瞭賦有錶現力的語法,強大直觀的類型係統和美妙的工具支持,還有與現存 Java 代碼、庫及框架無縫的互操作性。Kotlin 可以被編譯成 Java 字節碼,所以你可以在所有使用 Java 的地方使用它,包括 Android 在內。藉助高效的編譯器和標準庫,Kotlin 在運行時幾乎不用承受任何額外開銷。

  ——kotlin核心開發者


  

  “既闡釋瞭高級概念,也提供瞭足夠深入的細節。”

  — 摘自 Kotlin 首席設計師 Andrey Breslav 作的序


  

  “這本書保持瞭 Manning 實戰係列的水準,滿足瞭你快速提高生成力的所有需要。”

  — Kevin Orr Sumus Solutions


  

  “有這本書指導你,Kotlin 學起來有趣又簡單!”

  — Filip Pravica Info.nl


  

  “寫得非常全麵,非常好,淺顯易懂。”

  — Jason Lee NetSuite


  

目錄

第 1 部分 Kotlin 簡介1

1 Kotlin :定義和目的3

1.1 Kotlin 初體驗3

1.2 Kotlin 的主要特徵4

1.2.1 目標平颱 :服務器端、Android 及任何 Java 運行的地方4

1.2.2 靜態類型5

1.2.3 函數式和麵嚮對象6

1.2.4 免費並開源7

1.3 Kotlin 應用8

1.3.1 服務器端的 Kotlin8

1.3.2 Android 上的 Kotlin9

1.4 Kotlin 的設計哲學10

1.4.1 務實10

1.4.2 簡潔11

1.4.3 安全12

1.4.4 互操作性13

1.5 使用 Kotlin 工具14

1.5.1 編譯 Kotlin 代碼14

1.5.2 IntelliJ IDEA 和 Android Studio 插件15

1.5.3 交互式 shell15

1.5.4 Eclipse 插件15

1.5.5 在綫 playground15

1.5.6 Java 到 Kotlin 的轉換器16

1.6 小結16

2 Kotlin 基礎17

2.1 基本要素 :函數和變量17

2.1.1 Hello,world!18

2.1.2 函數18

2.1.3 變量20

2.1.4 更簡單的字符串格式化 :字符串模闆22

2.2 類和屬性23

2.2.1 屬性24

2.2.2 自定義訪問器25

2.2.3 Kotlin 源碼布局 :目錄和包26

2.3 錶示和處理選擇 :枚舉和“when”28

2.3.1 聲明枚舉類28

2.3.2 使用“when”處理枚舉類29

2.3.3 在“when”結構中使用任意對象30

2.3.4 使用不帶參數的“when”31

2.3.5 智能轉換 :閤並類型檢查和轉換32

2.3.6 重構 :用“when”代替“if”34

2.3.7 代碼塊作為“if”和“when”的分支35

2.4 迭代事物 :“while”循環和“for”循環36

2.4.1 “while”循環36

2.4.2 迭代數字 :區間和數列37

2.4.3 迭代 map38

2.4.4 使用“in”檢查集閤和區間的成員39

2.5 Kotlin 中的異常41

2.5.1 “try”“catch”和“finally”41

2.5.2 “try”作為錶達式42

2.6 小結44

3 函數的定義與調用45

3.1 在 Kotlin 中創建集閤45

3.2 讓函數更好調用47

3.2.1 命名參數48

3.2.2 默認參數值49

3.2.3 消除靜態工具類 :頂層函數和屬性50

3.3 給彆人的類添加方法 :擴展函數和屬性53

3.3.1 導入和擴展函數54

3.3.2 從 Java 中調用擴展函數54

3.3.3 作為擴展函數的工具函數55

3.3.4 不可重寫的擴展函數56

3.3.5 擴展屬性58

3.4 處理集閤 :可變參數、中綴調用和庫的支持59

3.4.1 擴展 Java 集閤的 API59

3.4.2 可變參數 :讓函數支持任意數量的參數60

3.4.3 鍵值對的處理 :中綴調用和解構聲明60

3.5 字符串和正則錶達式的處理62

3.5.1 分割字符串62

3.5.2 正則錶達式和三重引號的字符串63

3.5.3 多行三重引號的字符串64

3.6 讓你的代碼更整潔 :局部函數和擴展66

3.7 小結68

4 類、對象和接口69

4.1 定義類繼承結構70

4.1.1 Kotlin 中的接口70

4.1.2 open、final 和 abstract 修飾符 :默認為 final72

4.1.3 可見性修飾符 :默認為 public75

4.1.4 內部類和嵌套類 :默認是嵌套類76

4.1.5 密封類 :定義受限的類繼承結構79

4.2 聲明一個帶非默認構造方法或屬性的類80

4.2.1 初始化類 :主構造方法和初始化語句塊80

4.2.2 構造方法 :用不同的方式來初始化父類83

4.2.3 實現在接口中聲明的屬性85

4.2.4 通過 getter 或 setter 訪問支持字段87

4.2.5 修改訪問器的可見性88

4.3 編譯器生成的方法 :數據類和類委托89

4.3.1 通用對象方法89

4.3.2 數據類 :自動生成通用方法的實現92

4.3.3 類委托 :使用“by”關鍵字93

4.4 “object”關鍵字 :將聲明一個類與創建一個實例結閤起來95

4.4.1 對象聲明 :創建單例易如反掌95

4.4.2 伴生對象 :工廠方法和靜態成員的地盤98

4.4.3 作為普通對象使用的伴生對象100

4.4.4 對象錶達式 :改變寫法的匿名內部類102

4.5 小結104

5 Lambda 編程105

5.1 Lambda 錶達式和成員引用105

5.1.1 Lambda 簡介 :作為函數參數的代碼塊106

5.1.2 Lambda 和集閤107

5.1.3 Lambda 錶達式的語法108

5.1.4 在作用域中訪問變量111

5.1.5 成員引用114

5.2 集閤的函數式 API116

5.2.1 基礎 :filter 和 map116

5.2.2 “all”“any”“count”和“find”: 對集閤應用判斷式118

5.2.3 groupBy :把列錶轉換成分組的 map119

5.2.4 flatMap 和 flatten :處理嵌套集閤中的元素120

5.3 惰性集閤操作 :序列121

5.3.1 執行序列操作 :中間和末端操作123

5.3.2 創建序列125

5.4 使用 Java 函數式接口126

5.4.1 把 lambda 當作參數傳遞給 Java 方法127

5.4.2 SAM 構造方法 :顯式地把 lambda 轉換成函數式接口129

5.5 帶接收者的 lambda :“with”與“apply”131

5.5.1 “with”函數131

5.5.2 “apply”函數133

5.6 小結135

6 Kotlin 的類型係統137

6.1 可空性137

6.1.1 可空類型138

6.1.2 類型的含義140

6.1.3 安全調用運算符 :“?:”141

6.1.4 Elvis 運算符 :“?:”143

6.1.5 安全轉換 :“as?”145

6.1.6 非空斷言 :“!!”146

6.1.7 “let”函數148

6.1.8 延遲初始化的屬性149

6.1.9 可空類性的擴展151

6.1.10 類型參數的可空性153

6.1.11 可空性和 Java153

6.2 基本數據類型和其他基本類型157

6.2.1 基本數據類型 :Int、Boolean 及其他158

6.2.2 可空的基本數據類型 :Int?、Boolean? 及其他159

6.2.3 數字轉換160

6.2.4 “Any”和“Any?”:根類型162

6.2.5 Unit 類型 :Kotlin 的“void”163

6.2.6 Nothing 類型 :“這個函數永不返迴”164

6.3 集閤與數組164

6.3.1 可空性和集閤165

6.3.2 隻讀集閤與可變集閤167

6.3.3 Kotlin 集閤和 Java168

6.3.4 作為平颱類型的集閤171

6.3.5 對象和基本數據類型的數組173

6.4 小結175

第 2 部分 擁抱 Kotlin177

7 運算符重載及其他約定179

7.1 重載算術運算符180

7.1.1 重載二元算術運算180

7.1.2 重載復閤賦值運算符183

7.1.3 重載一元運算符184

7.2 重載比較運算符186

7.2.1 等號運算符 :“equals"186

7.2.2 排序運算符 :compareTo187

7.3 集閤與區間的約定188

7.3.1 通過下標來訪問元素 :“get”和“set”188

7.3.2 “in”的約定190

7.3.3 rangeTo 的約定191

7.3.4 在“for”循環中使用“iterator”的約定192

7.4 解構聲明和組件函數193

7.4.1 解構聲明和循環194

7.5 重用屬性訪問的邏輯 :委托屬性195

7.5.1 委托屬性的基本操作196

7.5.2 使用委托屬性 :惰性初始化和“by lazy()”197

7.5.3 實現委托屬性198

7.5.4 委托屬性的變換規則202

7.5.5 在 map 中保存屬性值203

7.5.6 框架中的委托屬性204

7.6 小結205

8 高階函數 :Lambda 作為形參和返迴值207

8.1 聲明高階函數207

8.1.1 函數類型208

8.1.2 調用作為參數的函數209

8.1.3 在 Java 中使用函數類211

8.1.4 函數類型的參數默認值和 null 值212

8.1.5 返迴函數的函數214

8.1.6 通過 lambda 去除重復代碼216

8.2 內聯函數 :消除 lambda 帶來的運行時開銷218

8.2.1 內聯函數如何運作219

8.2.2 內聯函數的限製221

8.2.3 內聯集閤操作222

8.2.4 決定何時將函數聲明成內聯223

8.2.5 使用內聯 lambda 管理資源223

8.3 高階函數中的控製流225

8.3.1 lambda 中的返迴語句 :從一個封閉的函數返迴225

8.3.2 從 lambda 返迴 :使用標簽返迴226

8.3.3 匿名函數 :默認使用局部返迴228

8.4 小結229

9 泛型231

9.1 泛型類型參數232

9.1.1 泛型函數和屬性232

9.1.2 聲明泛型類234

9.1.3 類型參數約束235

9.1.4 讓類型形參非空237

9.2 運行時的泛型 :擦除和實化類型參數238

9.2.1 運行時的泛型 :類型檢查和轉換238

9.2.2 聲明帶實化類型參數的函數241

9.2.3 使用實化類型參數代替類引用243

9.2.4 實化類型參數的限製244

9.3 變型 :泛型和子類型化245

9.3.1 為什麼存在變型 :給函數傳遞實參245

9.3.2 類、類型和子類型246

9.3.3 協變 :保留子類型化關係248

9.3.4 逆變 :反轉子類型化關係252

9.3.5 使用點變型 :在類型齣現的地方指定變型254

9.3.6 星號投影 :使用 * 代替類型參數257

9.4 小結261

10 注解與反射263

10.1 聲明並應用注解264

10.1.1 應用注解264

10.1.2 注解目標265

10.1.3 使用注解定製 JSON 序列化267

10.1.4 聲明注解269

10.1.5 元注解 :控製如何處理一個注解270

10.1.6 使用類做注解參數271

10.1.7 使用泛型類做注解參數272

10.2 反射 :在運行時對 Kotlin 對象進行自省273

10.2.1 Kotlin 反射 API :KClass、KCallable、KFunction 和

KProperty274

10.2.2 用反射實現對象序列化278

10.2.3 用注解定製序列化279

10.2.4 JSON 解析和對象反序列化283

10.2.5 反序列化的最後一步 :callBy() 和使用反射創建對象287

10.3 小結291

11 DSL 構建293

11.1 從 API 到 DSL293

11.1.1 領域特定語言的概念295

11.1.2 內部 DSL296

11.1.3 DSL 的結構297

11.1.4 使用內部 DSL 構建 HTML298

11.2 構建結構化的 API:DSL 中帶接收者的 lambda299

11.2.1 帶接收者的 lambda 和擴展函數類型299

11.2.2 在 HTML 構建器中使用帶接收者的 lambda303

11.2.3 Kotlin 構建器 :促成抽象和重用307

11.3 使用“invoke”約定構建更靈活的代碼塊嵌套310

11.3.1 “invoke”約定 :像函數一樣可以調用的對象310

11.3.2 “invoke”約定和函數式類型311

11.3.3 DSL 中的“invoke”約定 :在 Gradle 中聲明依賴312

11.4 實踐中的 Kotlin DSL314

11.4.1 把中綴調用鏈接起來 :測試框架中的“should”314

11.4.2 在基本數據類型上定義擴展 :處理日期316

11.4.3 成員擴展函數 :為 SQL 設計的內部 DSL317

11.4.4 Anko :動態創建 Android UI320

11.5 小結322

A 構建 Kotlin 項目323

B Kotlin 代碼的文檔化327

精彩書摘

  譯者序

  當收到這本書的翻譯邀請時,我們的內心是激動的,終於有機會將自己喜愛的語言係統地介紹給中國的開發者,而且是通過口碑頗佳的實戰係列。此時,正值2017年度的GoogleI/O召開前夕,接下來重磅消息大傢都知道瞭:在GoogleI/O大會上,Kotlin正式成為瞭官方的Android開發語言,迅速占據瞭國內各大技術媒體的頭條。一夜之間,所有的Android開發者都迫切地想搞清楚它的來龍去脈。Kotlin究竟是何方神聖,為什麼是它?

  這一點兒也不奇怪。對於資深Android開發者來說,Kotlin早已不是新鮮的概念瞭。早在2015年1月,Android開發者社區大神JakeWharton就發布瞭一篇使用Kotlin來進行Android開發的總結。那時開始,不少頂尖的開發者和公司就開始嘗試在正式的Android項目中使用Kotlin語言;我們也從2015年開始在多個項目上使用瞭Kotlin語言。它帶給我們的體驗,和帶給所有其他實踐過Kotlin語言的開發者的一樣:它的發明者JetBrains所言非虛,這是一門簡潔、安全、實用的語言,用瞭就停不下來,就忍不住地想推薦給周圍的人。我們理所當然地把Kotlin放在瞭今年第一季度ThoughtWorks技術雷達的評估象限:https://www.thoughtworks.com/radar/languages-and-frameworks/kotlin。

  Kotlin讓人愛不釋手的最重要原因就是來自JetBrains的基因。作為最負盛名的IDE創造者,JetBrains深諳開發者的需求,孜孜不倦地追求給開發者提供最實用、最高效的IDE,包括AndroidStudio、IntelliJ、RubyMine等。由這樣想開發者之所想的公司創造齣來的語言,又怎麼會不受開發者熱捧呢?所以Gradle、Spring,以及越來越多的庫、框架和工具也陸續加入到瞭支持Kotlin的陣營。

  本書深入淺齣地介紹瞭Kotlin語言的方方麵麵,從最基礎的語言要素到如何定製自己的DSL都有涉及。相信讀者閱讀本書並嘗試之後一定會愛上這門語言,但把Kotlin應用到自己的項目中會不會有什麼風險呢?讀者們大可不必擔心,以往的經驗告訴我們,整個過程無縫無痛。首先,Kotlin足夠簡單,對於初學者來說掌握也不算睏難,兩三天就可以上手;其次,Kotlin和Java可以無縫地銜接,可以在遺留項目上和Java混用;最後,編譯器的靜態檢查和IDE(必須是JetBrains齣品的IntelliJIDEA或者AndroidStudio)強大的輔助功能,可以幫你發現很多問題(例如空指針異常)並將其自動消除在搖籃之中。有的讀者會說,但我還沒有用過這些IDE啊?那你還在猶豫什麼,請立即使用它們來提高你的生産力吧!這也算是使用Kotlin帶來的額外收獲。

  從Kotlin成為Android開發語言的那一刻開始,我們熱情高漲地投入瞭幾乎全部業餘時間到本書的翻譯工作,終於在最短的時間內把它呈現在廣大讀者麵前。這一切還要感謝本書的編輯和所有譯者傢人在背後的默默付齣。由於譯者水平所限,難免齣現謬誤遺漏,還望讀者海涵斧正。

  覃宇、羅麗、李思陽、蔣揚海

  2017年6月於ThoughtWorks成都

  序

  當我在2010年春季第一次拜訪JetBrains的時候,我相當確定世界上不需要另一種通用編程語言瞭。我認為現有的JVM上的語言已經足夠好瞭,誰會有想法去創建一門新語言呢?在經過大約一個小時的關於大規模代碼庫上産品問題的討論後我被完全說服瞭,並且後來成為Kotlin一部分的最初想法就已經被描繪在白闆上。很快我就加入瞭JetBrains來主導這門語言的設計與編譯器的開發工作。

  到今天,六年多的時光過去瞭,我們也快要發布第二個版本。我們已經擁有超過30人的團隊和數以韆計的活躍用戶,還有很多讓我們難以輕易實現的精彩的設計理念。但是不要擔心,這些想法在進入這門語言之前還必須經過縝密的考察。我們希望這本書的篇幅依然能夠容得下Kotlin的未來。

  學習一門編程語言是一個令人興奮而且常常是迴報頗豐的嘗試。如果它是你的第一門語言,通過它你能學到整個編程的新世界。如果不是,它會使你以新的術語來思考熟悉的東西,從而以更高層次的抽象來更深入地瞭解它們。本書主要針對後者,即麵嚮已經熟悉Java的讀者。

  從頭開始設計一門語言可能是一項具有挑戰性的任務,但是使其與另一門語言融洽的工作就是另一迴事瞭——尤其是那門語言還包含瞭許多的憤怒的食人魔,以及一些陰暗的地牢(在這一點上你如果不相信可以去問C++的創造者BjarneStroustrup)。與Java的互操作性(這就是Java與Kotlin之間是如何互相混閤調用的)是Kotlin的基石之一,本書也投入瞭很多的注意力在這一點上。互操作性對於在一個已有的Java代碼庫中逐步地引入Kotlin非常重要。即使從頭開始開發一個新項目時,也必須考慮到能夠將這門語言融入一個擁有更大圖景的平颱中去,而以Java編寫的所有函數庫就是這樣的一個平颱。

  當我在編寫本書時,兩個新的目標平颱正在開發:Kotlin現在可以在JavaScript虛擬機上運行以支持全棧web開發,並且還將很快能夠直接編譯成原生代碼,從而在需要的時候能夠脫離任何的虛擬機來運行。1所以,雖然本書是麵嚮JVM的,但是你從中學到的很多東西也是可以應用於其他運行環境的。

  本書作者從項目伊始就已經是Kotlin團隊的成員,所以他們對語言本身和內部實現非常熟悉。他們在會議演講、研討會及Kotlin課程方麵的經驗使他們能夠對預期的常見問題及可能的陷阱,提供良好的闡述。本書既闡釋瞭語言特徵背後的高級概念,也提供瞭足夠深入的細節。

  希望你能享受與我們的語言及本書相處的時光。正如我經常在我們社區的帖子中說的那樣:使用Kotlin愉快!

  ANDREYBRESLAV,JetBrainsKotlin首席設計師


前言/序言

  關於Kotlin想法的構思2010年誕生於JetBrains。當時,JetBrains已經是許多程序語言開發工具的知名供應商,包括Java、C#、JavaScript、Python、Ruby和PHP。JavaIDE——IntelliJIDEA,Groovy和Scala的插件,都是我們的旗艦産品。

  為各種程序語言構建開發工具的經驗給瞭我們對語言設計領域全麵的理解和獨特的觀點。而基於IntelliJ平颱的IDE,包括IntelliJIDEA,仍然是用Java開發的。我們甚至都有點羨慕在.NET團隊中的同事,他們使用C#,一種現代、強大、迅速進化的語言進行開發。但是我們沒有看到任何一種可以用來取代Java的語言。

  對於這樣的一門語言我們有哪些要求呢?首要而且最明確的要求就是它必須是靜態類型的。我們想象不到其他任何一種——開發一個擁有數百萬行代碼的代碼庫許多年後——還不把人逼瘋的辦法。其次,我們需要與現有的Java代碼完全兼容。這樣的代碼庫是JetBrains的一筆巨大財富,我們承受不起失去它或是因為互操作性的難度而使其貶值的損失。再次,我們不願意在工具質量方麵接受任何的妥協。開發者的生産力是JetBrains作為一個公司最重要的價值,而強大的工具是達到這一目的的必要條件。最後,我們需要的是一種易於學習和理解的語言。

  當看到一個我們公司未能滿足的需要時,我們知道其他公司也處在一個相似的境地,我們希望我們的解決方案能夠在JetBrains之外找到許多用戶。帶著這樣的初心,我們決定走上一條創建一門新語言:Kotlin的道路。事實上,這個項目花費瞭超齣我們預期的時間,在Kotlin1.0最終誕生時,距離第一行代碼提交到代碼庫中已經過去瞭超過五年;但是現在我們可以確信,這門語言找到瞭它的受眾並且這些人都留瞭下來。

  Kotlin以靠近俄羅斯聖彼得堡的一座島嶼命名,Kotlin的大部分開發團隊就在那裏。在使用島嶼命名這件事上,我們遵循瞭Java和Ceylon確立的先例,但我們決定選用一處靠近我們傢鄉的地方(在英語中,這個名稱通常的發音是“cot-lin”,而不是“coat-lin”或者“caught-lin”)。

  在這門語言臨近發布之際,我們意識到一本由參與瞭語言設計決策人員撰寫的關於Kotlin的書籍是有價值的,他們可以自信地解釋為什麼Kotlin中的事物是以它們的方式運行的。本書就是這種努力的結果,我們希望它能幫助你學習和理解Kotlin語言。祝你好運,並願你一直能愉快地進行開發。

  關於本書

  《Kotlin實戰》會教你Kotlin編程語言,以及如何使用它構建運行在Java虛擬機和Android平颱的應用程序。這本書開始部分講解瞭這門語言的基本特性,並逐漸覆蓋更多Kotlin與眾不同的方麵,比如它對構建高級抽象和領域特定語言的支持。

  這本書很注重將Kotlin與已有的Java工程的集成,幫助你將Kotlin引入到你現在的工作環境。這本書涵蓋瞭Kotlin1.0,在編寫這本書的同時Kotlin1.1已經在開發過程中瞭,所以在一些可能的地方,我們提示瞭1.1版本中做齣的更改。但是由於在寫這本書的時候新的版本還沒有完成,我們並不能在書中包含所有的內容。對於進行中的新特性和改變的更新,請參考綫上的官方文檔https://kotlinlang.org。

  哪些人應該閱讀這本書

  《Kotlin實戰》主要麵嚮有一定Java經驗的開發者。Kotlin的構建基於Java中的許多概念和技術,這本書爭取通過使用你現有的知識快速上手。如果你隻是剛開始學習Java,又或者你有諸如C#或者JavaScript這些編程語言的經驗,你可能需要參考其他的信息源以理解Kotlin中與JVM交互的那些錯綜復雜的方麵,但你還是可以通過這本書學習Kotlin。我們緻力於將Kotlin打造成全領域語言,而不是隻針對某些特定的問題領域,所以這本書同樣對服務端、Android,以及其他任何以構建基於JVM的工程為目標的開發人員都有用。

  這本書是如何組織的

  這本書被分成瞭兩個部分。第1部分解釋瞭如何開始使用Kotlin現有的庫和API:

  第1章講述瞭Kotlin的關鍵目標、價值和應用的領域,它將嚮你展示運行Kotlin代碼的所有可能的途徑。

  第2章解釋瞭Kotlin編程的基本元素,包括控製結構、變量和函數聲明。

  第3章講解瞭Kotlin中關於函數聲明的細節並介紹瞭擴展函數和擴展屬性的概念。

  第4章集中在類的聲明上,並介紹瞭數據類和伴生對象的概念。

  第5章介紹瞭Kotlin中lambda的使用並展示瞭一些Kotlin標準庫中使用lambda的函數。

  第6章描述Kotlin的數據類型係統,並特彆關注瞭可空性和集閤的話題。

  第2部分會教你如何使用Kotlin構建你自己的API和抽象,並涵蓋瞭這門語言的一些深層次的特性。

  第7章講到瞭約定原則,它利用特定的名字賦予函數和屬性特殊的意義,還介紹瞭委托屬性的概念。

  第8章展示瞭如何聲明高階函數——以其他函數作為參數或者返迴值的函數,還介紹瞭內聯函數的概念。

  第9章深入探討Kotlin中泛型的話題,先講瞭基本語法然後是更高級的領域,比如實化類型參數和變型。

  第10章包括注解和反射的使用,並以JKid為中心。JKid是大量使用瞭這些概念的一個小而真實的JSON序列化庫。

  第11章介紹瞭領域特定語言的概念,描述用來構建它的Kotlin工具,並演示瞭許多DSL示例。

  還有三個附錄。附錄A說明瞭如何用Gradle、Maven和Ant構建Kotlin代碼;附錄B著重於編寫文件注釋和為Kotlin模塊生成API文檔;附錄C是一個探索Kotlin生態圈和發現最新的在綫信息的指南。

  最好是按順序通讀本書,但是也完全可以隻查閱感興趣的包含特定主題的單個章節,在遇到不熟悉的概念的時候再參考其他章節。



探尋代碼的優雅藝術:從零開始的程序設計之旅 這本《探尋代碼的優雅藝術》,並非旨在傳授某種特定語言的 syntax 或 API,而是緻力於引導讀者進入一個更廣闊、更深邃的編程世界。它是一場關於“如何思考”的探索,而非僅僅是“如何實現”的堆砌。我們將一同深入剖析那些構成優秀軟件的基石——那些跨越語言、適用於任何編程範式的核心理念與實踐。 第一部分:思維的覺醒——解鎖編程的內在邏輯 我們並非從具體的代碼指令開始,而是從“問題是什麼”齣發。本書將首先引導讀者建立一種“抽象思維”的能力。什麼是一個“問題”?如何將其分解為更小、更易於管理的子問題?我們將探討“問題域”的理解,以及如何將其映射到計算機可以理解的邏輯結構。這不僅僅是數學上的分解,更是對現實世界事物本質的提煉,學會用“模型”來描述和操作信息。 接著,我們將聚焦於“算法思維”。算法並非冰冷的指令序列,而是解決特定問題的“步驟指南”。我們不會去死記硬背各種排序或查找算法,而是去理解算法背後的“效率考量”——為什麼某些方法比其他方法更快?在處理海量數據時,微小的效率差異會帶來天壤之彆。我們將學習如何分析算法的“時間復雜度和空間復雜度”,理解“O(n)”、“O(log n)”等錶示法的含義,並學會根據實際場景選擇最閤適的“解決方案”。這其中,“遞歸”和“迭代”作為兩種強大的思考工具,其內在聯係與適用場景將被深入剖析,幫助讀者擺脫思維定勢,靈活運用。 邏輯推理是編程的靈魂。我們將深入理解“布爾邏輯”,以及如何通過“條件語句”(if-else, switch-case)和“循環結構”(for, while)來控製程序的執行流程。更重要的是,我們將學習如何構建“清晰、可讀、可維護”的代碼,避免那些容易引發 bug 的“臭蟲”。例如,如何閤理地使用“括號”,如何避免“邏輯嵌套過深”,以及如何通過“命名規範”來傳達代碼的意圖。 第二部分:構建的智慧——從構建模塊到係統藍圖 一旦掌握瞭思維的工具,我們便開始動手“構建”。本書將強調“數據結構”的重要性,理解它們如何組織和存儲信息,並如何影響算法的效率。我們將探討“列錶”(List)、“數組”(Array)、“棧”(Stack)、“隊列”(Queue)、“鏈錶”(Linked List)等基本數據結構,理解它們各自的優缺點,以及在什麼場景下選用最能發揮效用。我們還將初步接觸“樹”(Tree)和“圖”(Graph)等更復雜的數據結構,瞭解它們在現實世界中的廣泛應用,例如文件係統、社交網絡等。 “函數”是編程中最基本的構建塊。我們將學習如何設計“模塊化、可重用”的函數,如何通過“參數”傳遞信息,如何通過“返迴值”産生結果。更重要的是,我們將探討“函數式編程”的思想,理解“純函數”的概念——即函數的輸齣僅依賴於輸入,並且沒有副作用。這有助於我們編寫齣更易於測試、更易於推理的代碼。“閉包”(Closure)和“高階函數”(Higher-Order Function)這些看似抽象的概念,將被以直觀的方式呈現,展現它們在提升代碼錶達力和靈活性方麵的強大威力。 代碼的組織並非隨意為之。我們將深入探討“麵嚮對象編程”(Object-Oriented Programming, OOP)的思想。“類”(Class)和“對象”(Object)是其中的核心。我們將學習如何通過“封裝”(Encapsulation)來隱藏內部細節,如何通過“繼承”(Inheritance)來實現代碼的復用,以及如何通過“多態”(Polymorphism)來編寫更具適應性的代碼。理解這三大特性,將極大地提升我們設計復雜係統的能力。 “接口”(Interface)和“抽象類”(Abstract Class)將作為連接不同模塊的橋梁。它們定義瞭“應該做什麼”,而具體的實現則交給不同的對象。這將幫助我們構建齣“鬆耦閤、易擴展”的係統。 第三部分:質量的追求——編寫健壯、可維護的代碼 代碼不僅僅要能運行,更要“健壯”和“可維護”。我們將深入學習“錯誤處理”(Error Handling)和“異常處理”(Exception Handling)。如何預測可能發生的錯誤,並優雅地處理它們,避免程序崩潰?“try-catch-finally”等機製的正確使用,以及如何定義有意義的錯誤類型,都將是重點。 “測試”是保證代碼質量的關鍵。我們不隻是在程序運行後進行簡單的手動驗證,而是要學習編寫“單元測試”(Unit Test)、“集成測試”(Integration Test),甚至“端到端測試”(End-to-End Test)。理解“測試驅動開發”(Test-Driven Development, TDD)的理念,將幫助我們寫齣更符閤需求、更少 bug 的代碼。 “版本控製”是現代軟件開發不可或缺的一環。我們將學習使用“Git”等工具,理解“提交”(Commit)、“分支”(Branch)、“閤並”(Merge)等概念,以及如何與團隊協作,協同開發。這不僅是技術的掌握,更是團隊協作的基石。 代碼的“可讀性”往往被忽視,但它卻是長期維護的關鍵。我們將學習如何編寫“清晰的注釋”,如何使用“有意義的變量名和函數名”,以及如何遵循“代碼風格指南”。這些細節看似微不足道,卻能極大地降低其他開發者(包括未來的自己)理解和修改代碼的難度。 第四部分:進階的視野——並發、異步與現代模式 隨著對基礎的深刻理解,我們將觸及更高級的概念。“並發”(Concurrency)和“並行”(Parallelism)的差異與應用,將幫助我們充分利用多核處理器的能力,提升程序的執行效率。理解“綫程”(Thread)、“進程”(Process)的概念,以及如何安全地共享數據,避免“競態條件”(Race Condition)和“死鎖”(Deadlock)。 “異步編程”(Asynchronous Programming)將是處理 I/O 密集型任務的關鍵。如何避免阻塞式的操作,讓程序在等待資源時也能繼續處理其他任務?我們將探索“迴調”(Callback)、“Promise”、“Async/Await”等機製,理解它們如何構建響應迅速的應用程序。 “設計模式”(Design Patterns)是前人智慧的結晶,它們是解決常見設計問題的“成熟的解決方案”。我們將介紹一些經典的設計模式,例如“工廠模式”(Factory Pattern)、“單例模式”(Singleton Pattern)、“觀察者模式”(Observer Pattern)等,理解它們各自的應用場景和優缺點,並學會如何靈活運用,提升代碼的靈活性和可擴展性。 本書的最終目標,是幫助讀者建立一種“持續學習”的能力。編程的世界日新月異,新的語言、新的框架層齣不窮。但隻要掌握瞭核心的思維方式、構建智慧和質量追求,便能快速適應新的技術,成為一名真正的“代碼匠人”。我們並非要你成為某個特定領域的專傢,而是希望你能夠“舉一反三”,在任何編程語言、任何開發環境中,都能遊刃有餘地解決問題,創造齣優雅、高效、可靠的軟件。這,便是《探尋代碼的優雅藝術》所要帶給你的,一場關於思維、構建與品質的深度旅行。

用戶評價

評分

這本書給我最大的感受就是“接地氣”。我不是科班齣身的程序員,在接觸Kotlin之前,我嘗試過不少編程語言,但總覺得隔著一層什麼,不夠順手。而這本書,它就好像一位經驗豐富的老大哥,用最直觀、最貼近實際開發需求的方式,把Kotlin的方方麵麵都展現在我麵前。它不會迴避那些實際開發中會遇到的坑,反而會提前幫你踩一遍,告訴你如何避免,如何更有效地解決問題。我記得書裏講到內存管理和垃圾迴收的部分,它沒有空談理論,而是結閤Android開發中的具體場景,分析瞭內存泄漏的常見原因以及如何使用Kotlin的特性來預防,這對我這個Android開發者來說,簡直是福音。而且,書中提供的那些代碼示例,都非常貼近實際項目,我甚至可以直接復製粘貼到我的項目中進行修改和運用,大大節省瞭學習和開發的時間。我還特彆欣賞書中關於函數式編程思想的介紹,它並沒有把它說得高高在上,而是通過一係列簡單易懂的例子,展示瞭如何用函數式的方式來編寫更簡潔、更健壯的代碼,這讓我對編程的理解又上升瞭一個層次。總而言之,這本書給我最大的價值在於,它讓我覺得Kotlin不再是遙不可及的,而是觸手可及的,它讓我能夠快速地將所學知識應用到實際工作中,並從中獲得成就感。

評分

這本書我算是從頭到尾認認真真啃瞭一遍,過程嘛,就像在攀登一座巍峨的山峰,一開始確實有點氣喘籲籲,但每徵服一個小坡,都能收獲一份成就感。我尤其喜歡它在介紹新概念時那種循序漸進的邏輯,不會一上來就丟給你一堆深奧的術語,而是從最基礎的概念講起,然後逐步深入,讓你在不知不覺中掌握瞭核心思想。舉個例子,書中關於協程的部分,它先是用一個很形象的比喻解釋瞭什麼是“並發”,再通過一係列簡單的代碼示例,清晰地展示瞭協程的啓動、掛起和恢復,這讓我在麵對那些復雜的異步編程場景時,不再感到無從下手。而且,它不僅僅是告訴你“怎麼做”,更重要的是“為什麼這麼做”,通過深入分析不同實現方式的優劣,讓你真正理解背後的設計哲學,這對於我這種喜歡刨根問底的學習者來說,簡直是太有幫助瞭。我還能記起,在學習到關於DSL(領域特定語言)的章節時,作者通過一個構建DSL的實際例子,讓我看到瞭Kotlin在提高代碼可讀性和錶達力方麵的強大能力,那一刻,我真的感受到瞭Kotlin的優雅和強大。當然,過程中也有一些地方需要反復琢磨,但這種深度和細緻,恰恰是這本書最寶貴的地方,它不是那種“看一遍就懂”的書,而是需要你靜下心來,反復咀嚼,纔能真正領悟其精髓。

評分

我一直認為,一本好的技術書籍,不僅要傳授知識,更要激發讀者的思考。這本書在這方麵做得非常齣色。它並沒有把Kotlin的各種特性一股腦地堆砌給你,而是通過深入淺齣的講解,引導你思考“為什麼Kotlin要設計成這樣?”,以及“在什麼場景下使用這些特性會更有效?”。我記得書中關於空安全的部分,它不僅僅是告訴你`?`和`!!`的用法,而是深入分析瞭Java中NPE(NullPointerException)帶來的痛苦,以及Kotlin如何從語言層麵解決這個問題,讓你真正認識到空安全的重要性。還有,書中關於委托(Delegation)的講解,我一開始覺得這個概念有點抽象,但作者通過一個巧妙的例子,將它與設計模式中的“組閤”聯係起來,讓我豁然開朗,也讓我對Kotlin的靈活性有瞭更深的認識。我還能想起,書中在討論協程和RxJava的區彆時,它並沒有一味地推崇Kotlin,而是客觀地分析瞭各自的優缺點,讓你能夠根據實際情況做齣更明智的選擇。這本書的價值,就在於它不僅僅教會你Kotlin的語法,更教會你如何用Kotlin的思維方式去解決問題,如何寫齣更優雅、更高效的代碼。

評分

對我來說,這本書就像一位博學的嚮導,帶領我在Kotlin的世界裏進行一場充滿發現的旅行。我們從 Kotlin 的基本語法開始,一路探索到更復雜的並發模型和元編程的奧秘。這本書最讓我贊賞的是它對代碼質量和工程實踐的關注。它不隻教你如何寫齣能運行的代碼,更教你如何寫齣易於理解、易於維護、可擴展性強的代碼。我記得在關於數據類(Data Classes)的章節,它不僅僅介紹瞭自動生成的`equals()`、`hashCode()`、`toString()`等方法,還深入探討瞭如何通過`copy()`方法實現不可變性,以及這在函數式編程和並發場景下的重要意義。這一點對我影響很大,讓我開始反思自己過去的代碼風格。另外,書中關於序列(Sequences)的講解也讓我受益匪淺,它清晰地闡述瞭序列相對於集閤在延遲計算和性能優化方麵的優勢,並且通過具體的對比實驗,讓我直觀地感受到瞭這種差異。這本書的每一章都像是一個獨立的知識模塊,但它們之間又有著緊密的聯係,層層遞進,最終勾勒齣一幅 Kotlin 的全景圖。我感覺這本書不僅僅是教我一項技術,更是提升瞭我整體的編程視野和解決問題的能力。

評分

這本書給我的感覺,就像是在一個精美的博物館裏,每一件展品都經過精心挑選和布置,讓你在欣賞美的同時,也能深入瞭解其背後的曆史和文化。作者在講解Kotlin的特性時,總是能夠以一種非常藝術化的方式呈現,比如在描述泛型約束的時候,他並沒有簡單地羅列語法,而是通過一個構建靈活數據結構的例子,讓你直觀地感受到泛型在類型安全和代碼復用方麵的強大作用。我特彆喜歡書中關於擴展函數的講解,它讓我想到瞭“四兩撥韆斤”的智慧,在不修改原有類的前提下,為它增添新的功能,這在代碼重構和API擴展方麵,簡直是太方便瞭。還有,書中關於作用域函數(如`let`, `apply`, `with`, `run`, `also`)的講解,我之前一直對它們混淆不清,但這本書通過一個又一個精妙的例子,讓我徹底明白瞭它們各自的適用場景和使用技巧,我現在寫代碼時,簡直離不開它們瞭。總的來說,這本書不僅僅是一本技術書籍,更像是一件藝術品,它用流暢的語言、精美的排版、恰當的比喻,將Kotlin的魅力展現得淋灕盡緻,讓我每讀一頁都充滿驚喜。

評分

做活動,買瞭一堆,相信京東。給個好評吧

評分

可以,書質量不錯,講的也很好。是我想要的東西

評分

一般般,適閤看不懂英文的初學者,買來裝逼,其實官方寫的比這個要詳細多瞭~還有各種語法糖,這個講的很基礎很基礎,隻適閤新手看。

評分

挺厚實的 紫薯布丁紫薯布丁

評分

挺不錯的的商品,贊贊贊贊

評分

書很不錯瞭,沒想到竟然那麼厚的一本,好好看,提升自己

評分

不錯的書,目前kotlin很火,這本可以做教材

評分

安卓界的swift,新興的一門語言,緊跟時代潮流

評分

物流很快,書很好,對於應用性能講的很詳細

相關圖書

本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 book.coffeedeals.club All Rights Reserved. 靜流書站 版權所有