《Kotlin移動和伺服器端套用開發》是2022年10月清華大學社出版的圖書,作者[美]布雷特·麥克勞克林(Brett McLaughlin),譯者是任強。
基本介紹
- 中文名:Kotlin移動和伺服器端套用開發
- 作者:[美]布雷特·麥克勞克林(Brett McLaughlin)
- 譯者:任強
- 出版時間:2022年10月
- 出版社:清華大學出版社
- 頁數:376 頁
- ISBN:9787302614050
- 原作品:Programming Kotlin Applications Building Mobile and Server-Side Applications with Kotin
- 定價:99.8 元
- 開本:16 開
- 裝幀:平裝
內容簡介,圖書目錄,
內容簡介
學習使用 Kotlin 創建有用、安全且令人興奮的套用
《Kotlin移動和伺服器端套用開發》為學習快速發展的程式語言Kotlin提供了易於理解的綜合資源。本書將帶領讀者快速上手Kotlin,不講無關緊要的內容,且提供的示例可用於真實套用中。
本書由著名技術專家Brett McLaughlin撰寫,引導讀者掌握這個替代Java的流行程式語言的基本和高級主題。雖然本書深入介紹了移動編程,但Kotlin語言不僅可用於移動套用開發,還可用於伺服器端套用開發。
本書介紹了開始第一個Kotlin項目所需的知識,詳述了Kotlin如何安全地保護和存儲信息,引導讀者了解該語言的局限性以及何時不適合使用Kotlin。最後, 還提供了一些實用且適用的代碼示例,讀者可以使用這些示例即時改進自己的Kotlin套用。
本書適合已在使用Java或Ruby開發套用的讀者,也適合那些試圖使用Kotlin但難以內化其獨特功能的讀者。如果你一直在“用Kotlin寫Java代碼”,或希望開始利用Kotlin提供的一切,那么本書就是為你而寫。
主要內容:
● 如何編寫自己的第一個Kotlin套用
● 如何將Kotlin用作伺服器端的解決方案,而不僅僅是編寫移動套用的語言
● Kotlin如何安全地保護用戶信息以及如何編寫安全的套用
● 為什麼Kotlin是Java的優秀替代品,為什麼它是世界上發展最快的程式語言之一
圖書目錄
第1章 對象的世界 1
1.1 Kotlin:一門新興的程式語言 1
1.2 什麼是Kotlin 2
1.3 Kotlin是面向對象的語言 3
1.4 設定Kotlin環境 4
1.4.1 安裝Kotlin(及IDE) 4
1.4.2 安裝Kotlin(並使用命令行) 10
1.5 創建有用的對象 12
1.5.1 使用構造函式將值傳遞給對象 13
1.5.2 使用toString ( )方法列印對象 14
1.5.3 覆蓋toString ( )方法 15
1.5.4 數據並不都是屬性值 17
1.6 初始化對象並更改變數 18
1.6.1 使用代碼塊初始化類 19
1.6.2 Kotlin自動生成getter和setter 20
1.6.3 常量變數不能改變 21
第2章 Kotlin很難出錯 25
2.1 繼續探究Kotlin類 25
2.1.1 根據類命名檔案 26
2.1.2 用包管理類 27
2.1.3 將Person類放入包中 28
2.1.4 類:Kotlin的終極類型 31
2.2 Kotlin有很多類型 31
2.2.1 Kotlin中的數字 31
2.2.2 字母和事物 32
2.2.3 真值或假值 33
2.2.4 類型不可互換I 33
2.2.5 屬性必須初始化 34
2.2.6 類型不可互換II 35
2.2.7 Kotlin很容易出錯(某種程度上) 37
2.3 覆蓋屬性訪問器和更改器 38
2.3.1 自定義設定(custom-set)屬性不能位於主構造函式中 38
2.3.2 覆蓋某些屬性的更改器 42
2.4 類可以有自定義行為 44
2.4.1 在類中定義自定義方法 44
2.4.2 每個屬性都必須初始化 45
2.4.3 有時並不需要屬性 48
2.5 類型安全改變一切 50
2.6 代碼的編寫很少是線性的 50
第3章 Kotlin非常優雅 53
3.1 對象、類與Kotlin 53
3.2 所有類都需要equals( )方法 54
3.2.1 equals(x)用於比較兩個對象 54
3.2.2 覆蓋equals(x)使其有意義 56
3.2.3 每個對象都是一個特定的類型 58
3.2.4 空值 60
3.3 每個對象實例都需要唯一的hashCode( ) 61
3.3.1 所有類都繼承自Any類 61
3.3.2 始終覆蓋hashCode( )和equals(x) 64
3.3.3 默認哈希值是基於記憶體位置的 65
3.3.4 使用哈希值生成哈希值 66
3.4 基於有效和快速的equals(x)和hashCode( )方法的搜尋 67
3.4.1 在hashCode( )中區分多個屬性 67
3.4.2 用==代替equals(x) 68
3.4.3 hashCode( )的快速檢查 69
3.5 基本的類方法非常重要 70
第4章 繼承很重要 71
4.1 好的類並不總是複雜的類 71
4.1.1 保持簡單、直白 72
4.1.2 保持靈活、直白 73
4.2 類可以定義屬性的默認值 75
4.2.1 構造函式可以接收默認值 76
4.2.2 Kotlin希望參數有序排列 76
4.2.3 按名稱指定參數 77
4.2.4 更改參數順序 77
4.3 次構造函式可以提供額外的構造選項 78
4.3.1 次構造函式排在主構造函式之後 79
4.3.2 次構造函式可給屬性賦值 80
4.3.3 有時,可以將null值賦給屬性 82
4.3.4 null屬性可能會導致問題 85
4.4 使用自定義更改器處理依賴值 85
4.4.1 在自定義更改器中設定依賴值 86
4.4.2 所有屬性賦值都會使用屬性的更改器 86
4.4.3 可為空的值可以設定為空 87
4.4.4 限制對依賴值的訪問 90
4.4.5 儘可能地計算依賴值 91
4.4.6 唯讀屬性可不用括弧 93
4.5 具體套用——子類 95
4.5.1 Any是所有Kotlin類的基類 96
4.5.2 {...}是摺疊代碼的簡略表達 97
4.5.3 類必須是開放的才能有子類 99
4.5.4 術語:子類、繼承、基類等 100
4.5.5 子類必須遵循其父類的規則 100
4.5.6 子類擁有其父類的所有行為 101
4.6 子類應不同於父類 101
4.6.1 子類的構造函式經常添加參數 101
4.6.2 不要讓不可變屬性成為可變屬性 102
4.6.3 有時,對象並不完全映射現實世界 103
4.6.4 通常,對象應當映射現實世界 104
第5章 List、Set和Map 105
5.1 List只是事物的集合 105
5.1.1 Kotlin的List:一種集合類型 105
5.1.2 更改可變列表 109
5.1.3 從可變列表獲取屬性 110
5.2 List(集合)的類型 111
5.2.1 給列表定義類型 111
5.2.2 遍歷列表 113
5.2.3 Kotlin會揣摩你的意思 116
5.3 List:有序且可重複 117
5.3.1 有序可以使你按順序訪問列表項 117
5.3.2 List可以包含重複項 118
5.4 Set:無序但唯一 119
5.4.1 在Set中,無法保證順序 119
5.4.2 何時順序至關重要 120
5.4.3 動態排序List(和Set) 121
5.4.4 Set不允許有重複項 121
5.4.5 疊代器不(總)是可變的 125
5.5 Map:當單值不夠用時 125
5.5.1 Map是由工廠方法創建的 126
5.5.2 使用鍵查找值 126
5.5.3 你希望值是什麼 127
5.6 如何過濾集合 127
5.6.1 基於特定條件的過濾 128
5.6.2 更多有用的過濾器變體 129
5.7 集合:用於基本類型和自定義類型 130
5.7.1 向Person類添加集合 130
5.7.2 允許將集合添加到集合屬性 132
5.7.3 Set和MutableSet不一樣 134
5.7.4 集合屬性只是集合 135
第6章 Kotlin的未來是泛型 137
6.1 泛型允許推遲類型定義 137
6.1.1 集合是泛型的 137
6.1.2 參數化類型在整個類中都可用 138
6.1.3 泛型到底是什麼 139
6.2 泛型會儘可能地推斷類型 140
6.2.1 Kotlin會尋找匹配的類型 140
6.2.2 Kotlin會尋找最精確匹配的類型 141
6.2.3 Kotlin不會告訴你泛型類型 142
6.2.4 告訴Kotlin你想要什麼 143
6.3 協變:類型與賦值的研究 143
6.3.1 什麼是泛型類型 143
6.3.2 有些語言需要額外的工作才能實現協變 145
6.3.3 Kotlin實際上也需要額外的工作才能實現協變 145
6.3.4 有時必須把顯而易見的事情說清楚 146
6.3.5 協變類型限制輸入類型和輸出類型 146
6.3.6 協變實際上是使繼承按期望的方式工作 146
6.4 逆變:從泛型類型構建消費者 147
6.4.1 逆變:限制輸出而不是輸入 147
6.4.2 逆變從基類一直到子類都有效 149
6.4.3 逆變類不能返回泛型類型 150
6.4.4 這些真的重要嗎 150
6.5 UnsafeVariance:學習規則,然後打破規則 151
6.6 類型投影允許你處理基類 152
6.6.1 型變可以影響函式,而不只是類 152
6.6.2 類型投影告知Kotlin可將子類作為基類的輸入 153
6.6.3 生產者不能消費,消費者也不能生產 153
6.6.4 型變不能解決所有問題 154
第7章 控制結構 155
7.1 控制結構是編程的基礎 155
7.2 if和else控制結構 156
7.2.1 !!確保非空值 156
7.2.2 控制結構影響代碼的流程 157
7.2.3 if和else遵循基本結構 158
7.2.4 表達式和if語句 159
7.3 when是Kotlin版本的Switch 163
7.3.1 每個比較或條件都是一個代碼塊 163
7.3.2 用else代碼塊處理其他一切 164
7.3.3 每個分支可以支持一定範圍 165
7.3.4 每個分支通常會有部分表達式 166
7.3.5 分支條件按順序依次檢查 168
7.3.6 分支條件只是表達式 169
7.3.7 when語句也可作為一個整體來賦值 169
7.4 for循環 171
7.4.1 Kotlin中的for循環需要一個疊代器 171
7.4.2 你做得越少,Kotlin做得越多 172
7.4.3 for對疊代有要求 173
7.4.4 可以用for獲取索引而不是對象 173
7.5 執行while循環直至條件為假 176
7.5.1 while與Boolean條件有關 176
7.5.2 巧用while:多個運算符,一個變數 178
7.5.3 組合控制結構,獲得更有趣的解決方案 179
7.6 do...while循環至少運行一次 180
7.6.1 每個do ... while循環都可以改寫成一個while循環 180
7.6.2 如果必須先執行一定的操作,那么使用do ... while 181
7.6.3 選用do ... while可能是基於性能的考慮 186
7.7 break可以立即跳出循環 186
7.7.1 break跳過循環中剩餘的部分 186
7.7.2 可以使用帶標籤的break 187
7.8 使用continue立即進入下一次疊代 189
7.8.1 continue也可以使用標籤 189
7.8.2 if和continue對比:通常風格更勝過實質 190
7.9 return語句用於返回 191
第8章 數據類 193
8.1 現實世界中的類是多種多樣,但經過廣泛研究的 193
8.1.1 許多類具有共同的特徵 193
8.1.2 共同的特徵導致共同的用法 195
8.2 數據類是指專注於數據的類 195
8.2.1 數據類提供處理數據的基本功能 195
8.2.2 數據的基本功能包括hashCode( )和equals(x)方法 197
8.3 通過解構聲明獲取數據 199
8.3.1 獲取類實例中的屬性值 199
8.3.2 解構聲明並不十分聰明 200
8.3.3 Kotlin使用componentN( )方法使聲明生效 201
8.3.4 可以向任何類添加componentN( )方法 202
8.3.5 能使用數據類則儘量使用 202
8.4 可以“複製”一個對象或創建一個對象副本 203
8.4.1 使用=實際上不會創建副本 203
8.4.2 使用copy( )方法才創建真正的副本 204
8.5 數據類需要你做幾件事 205
8.5.1 數據類需要有參數並指定val或var 205
8.5.2 數據類不能是抽象的、開放的、密封的或內部的 206
8.6 數據類能為生成的代碼添加特殊行為 207
8.6.1 可以覆蓋許多標準方法的編譯器生成版本 207
8.6.2 父類函式優先 208
8.6.3 數據類僅為構造函式參數生成代碼 208
8.6.4 equals( )方法僅使用構造函式中的參數 211
8.7 最好單獨使用數據類 212
第9章 枚舉和密封類,以及更多專業類 215
9.1 字元串是可怕的靜態類型表示法 215
9.2 伴生對象為單例 219
9.2.1 常量必須只有一個 220
9.2.2 伴生對象是單例 221
9.2.3 伴生對象仍然是對象 222
9.2.4 可以使用沒有名稱的伴生對象 224
9.3 枚舉定義常量並提供類型安全 228
9.3.1 枚舉類提供類型安全值 229
9.3.2 枚舉類仍然是類 231
9.4 密封類是類型安全的類層次結構 234
9.4.1 枚舉和類層次結構用於共享行為 235
9.4.2 密封類解決了固定選項和非共享行為 236
9.4.3 when需要處理所有密封子類 238
第10章 函式 247
10.1 重溫函式的語法 247
10.1.1 函式基本公式 247
10.1.2 函式參數也有模式 249
10.2 函式遵循靈活規則 257
10.2.1 函式實際上默認返回Unit 258
10.2.2 函式可以是單一表達式 259
10.2.3 函式可以有可變數量的入參 264
10.3 Kotlin的函式具有作用域 267
10.3.1 局部函式是函式內部的函式 267
10.3.2 成員函式在類中定義 268
10.3.3 擴展函式可以擴展現有行為而無須繼承 268
10.4 函式字面量:Lambda和匿名函式 272
10.4.1 匿名函式沒有名稱 273
10.4.2 高階函式接收函式作為入參 276
10.4.3 Lambda表達式是語法精簡的函式 280
10.5 功能越多,出現問題的可能性就越大 285
第11章 編寫地道的Kotlin代碼 287
11.1 作用域函式為代碼提供上下文 287
11.2 使用let提供對實例的即時訪問 288
11.2.1 let提供it來訪問實例 289
11.2.2 作用域代碼塊實際上就是Lambda 290
11.2.3 let和其他作用域函式主要是為了方便 291
11.2.4 鏈式作用域函式和嵌套作用域函式不一樣 294
11.2.5 可以通過作用域函式得到非空結果 297
11.3 with是用於處理實例的作用域函式 304
11.3.1 with使用this作為其對象引用 305
11.3.2 this引用始終可用 306
11.3.3 with返回Lambda的結果 306
11.4 run是一個代碼運行器和作用域函式 307
11.4.1 選擇作用域函式是風格和偏好的問題 307
11.4.2 run不必對對象實例進行操作 309
11.5 apply具有上下文對象但沒有返回值 309
11.5.1 apply對實例進行操作 310
11.5.2 apply返回的是上下文對象,而不是Lambda的結果 310
11.5.3 ?:是Kotlin的Elvis運算符 311
11.6 also在返回實例前先在實例上進行操作 312
11.6.1 also只是又一個作用域函式 313
11.6.2 also在賦值前執行 314
11.7 作用域函式總結 316
第12章 再次體會繼承 321
12.1 抽象類需要延遲實現 321
12.1.1 抽象類無法實例化 322
12.1.2 抽象類定義了與子類的契約 324
12.1.3 抽象類可以定義具體屬性和函式 326
12.1.4 子類履行通過抽象類編寫的契約 328
12.2 接口定義行為但沒有主體 332
12.2.1 接口和抽象類相似 333
12.2.2 接口無法保存狀態 335
12.2.3 接口可以定義函式體 337
12.2.4 接口允許多種實現形式 338
12.3 “委託”為擴展行為提供了另一個選項 341
12.3.1 抽象類從通用到特定 341
12.3.2 更多特異性意味著更多的繼承 343
12.3.3 委託給屬性 346
12.3.4 委託在實例化時發生 348
12.4 繼承需要事前事後深思熟慮 350
第13章 學習Kotlin的下一步 351
13.1 用Kotlin編寫Android應用程式 351
13.1.1 用於Android開發的Kotlin仍然只是Kotlin 351
13.1.2 從概念到示例 353
13.2 Kotlin和Java是很棒的夥伴 353
13.2.1 IDE是一個關鍵組件 353
13.2.2 Kotlin被編譯為Java虛擬機的位元組碼 355
13.2.3 使用Gradle構建項目 355
13.3 有關Kotlin的問題仍然存在時 355
13.4 使用網際網路來補充自己的需求和學習風格 356
13.5 接下來怎么辦 357