Head First Kotlin程序設(shè)計(jì)
定 價(jià):139 元
- 作者:[美]道恩?格里菲斯(Dawn Griffiths)戴維?格里菲斯( David G
- 出版時(shí)間:2020/8/1
- ISBN:9787111662358
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP312.8
- 頁(yè)碼:0
- 紙張:
- 版次:
- 開(kāi)本:16開(kāi)
本書(shū)介紹了Kotlin的基本語(yǔ)法、常用類型、面向?qū)ο缶幊桃约耙恍└唠A的知識(shí)。在所有的章節(jié)中,都廣泛使用圖片和會(huì)話的介紹方式,以幫助大腦更容易理解和獲取信息。此外還有各種生動(dòng)的實(shí)例、習(xí)題,以及有問(wèn)必答環(huán)節(jié)。讓讀者仿佛置身其中,更加高效專注地學(xué)習(xí)知識(shí),而把一些無(wú)關(guān)緊要的事情拋之腦后。本書(shū)以類似于“劃重點(diǎn)”或“記筆記”的方式對(duì)某些內(nèi)容或代碼進(jìn)行注解和說(shuō)明,讀者更容易知曉內(nèi)容和代碼的重要部分。此外,有問(wèn)必答環(huán)節(jié)的設(shè)計(jì)也十分巧妙,它會(huì)囊括一些在文中沒(méi)有提及到,但讀者可能會(huì)疑惑的問(wèn)題
引子 xxi
1 開(kāi)始:快速入門(mén) 1
2 基本類型和變量:關(guān)于變量 31
3 函數(shù):跳出主函數(shù) 59
4 類和對(duì)象:初步認(rèn)識(shí)類 91
5 子類和父類:使用繼承 121
6 抽象類和接口:重要的多態(tài) 155
7 數(shù)據(jù)類:處理數(shù)據(jù) 191
8 空值和異常:使代碼安然無(wú)恙 219
9 集合:變得有條理 251
10 泛型:從輸出推斷輸入 289
11 lambda和高階函數(shù):像數(shù)據(jù)一樣使用代碼 325
12 內(nèi)置高階函數(shù):使你的代碼更強(qiáng)大 363
附錄i 協(xié)程:并行地執(zhí)行代碼 397
附錄ii 測(cè)試:確保你的代碼可以運(yùn)行 409
附錄iii 其他:我們沒(méi)有涉及的十大內(nèi)容 419
詳細(xì)目錄
引子
你的大腦與Kotlin。你想學(xué)些新東西,但你的大腦總是幫倒忙,讓學(xué)習(xí)無(wú)法繼續(xù)。你的大腦在想:“最好留出空間來(lái)記住那些更重要的事情,比如要避開(kāi)哪些野生動(dòng)物!蹦敲矗撊绾魏弪_你的大腦,讓它認(rèn)為如果不知道Kotlin你將無(wú)法生存?
誰(shuí)適合看本書(shū) xxii
我們知道你們?cè)谙胧裁?xxiii
我們知道你的大腦在想什么 xxiii
元認(rèn)知:思考何為思考 xxv
我們是這樣做的 xxvi
重要說(shuō)明 xxviii
技術(shù)審校團(tuán)隊(duì) xxx
致謝 xxxi
1 開(kāi)始
快速入門(mén)
Kotlin正在掀起新的浪潮。
自首次發(fā)布以來(lái),Kotlin就以其友好的語(yǔ)法,簡(jiǎn)潔、靈活和強(qiáng)大的功能給程序員留下了深刻的印象。在本書(shū)中,我們將教你如何構(gòu)建自己的Kotlin應(yīng)用程序。我們將從創(chuàng)建并運(yùn)行基本的應(yīng)用程序開(kāi)始講解。在此過(guò)程中,你將了解Kotlin的一些基本語(yǔ)法,例如基本語(yǔ)句、循環(huán)以及條件分支。你的旅程剛剛開(kāi)始。
能夠自由選擇編譯平臺(tái)意味著Kotlin可以運(yùn)行于服務(wù)器、云平臺(tái)、瀏覽器、移動(dòng)設(shè)備……
歡迎來(lái)到Kotlin之城 2
你幾乎可以在任何地方使用Kotlin 3
本章內(nèi)容 4
安裝IntelliJ IDEA 7
構(gòu)建一個(gè)基本的應(yīng)用程序 8
你的第一個(gè)Kotlin項(xiàng)目 11
新增一個(gè)Kotlin文件 12
main函數(shù)剖析 13
將main函數(shù)添加至App.kt文件 14
你可以在main函數(shù)里面做些什么呢 16
循環(huán) 17
循環(huán)示例 18
條件分支 19
帶有返回值的if語(yǔ)句 20
更新main函數(shù) 21
使用Kotlin的交互式shell 23
你可以在REPL中加入多行代碼片段 24
Kotlin工具箱 30
2 基本類型和變量
關(guān)于變量
所有代碼都依賴于——變量
本章我們將進(jìn)一步探索Kotlin,并且向你展示Kotlin變量是如何工作的。你會(huì)學(xué)習(xí)Kotlin的基本類型,例如整型(Int)、浮點(diǎn)型(Float)和布爾型(Boolean),并且學(xué)習(xí)Kotlin的編譯器是如何聰明地從給定的變量值推測(cè)出變量類型的。你還將學(xué)會(huì)如何使用String模板和簡(jiǎn)短的代碼來(lái)構(gòu)建復(fù)雜的String類型,并且學(xué)會(huì)創(chuàng)建數(shù)組來(lái)存儲(chǔ)多個(gè)值。最后,你會(huì)發(fā)現(xiàn)對(duì)象對(duì)于Kotlin之城如此重要的原因。
你的代碼需要變量 32
當(dāng)你聲明變量時(shí)會(huì)發(fā)生什么 33
變量保存了指向?qū)ο蟮囊? 34
Kotlin的基本類型 35
如何顯式聲明變量類型 37
根據(jù)變量類型正確賦值 38
將一個(gè)變量值賦給另一個(gè)變量 39
類型轉(zhuǎn)換 40
數(shù)值類型轉(zhuǎn)換背后發(fā)生了什么 41
小心溢出 42
使用數(shù)組存放多個(gè)值 45
創(chuàng)建Phrase-O-Matic應(yīng)用程序 46
向PhraseOMatic.kt中添加代碼 47
編譯器從數(shù)組中元素的值來(lái)推測(cè)數(shù)組的類型 49
var表示該變量可以指向不同數(shù)組 50val
表示該變量永遠(yuǎn)指向同一個(gè)數(shù)組 51
Kotlin工具箱 58
3 函數(shù)
跳出主函數(shù)
現(xiàn)在,是時(shí)候更上一層樓了。下面,我們一起來(lái)了解一下函數(shù)。
到目前為止,你一直將所有的代碼寫(xiě)在應(yīng)用程序的主函數(shù)中。但是,如果你想要編寫(xiě)更有條理并且更加易于維護(hù)的代碼,你需要知道如何將代碼拆分為不同的函數(shù)。在本章中,你將通過(guò)構(gòu)建一個(gè)游戲來(lái)學(xué)習(xí)如何編寫(xiě)函數(shù)以及與應(yīng)用程序交互。你將了解如何編寫(xiě)簡(jiǎn)明的單個(gè)表達(dá)式函數(shù)。在此過(guò)程中,你還將學(xué)習(xí)如何使用強(qiáng)大的for循環(huán)來(lái)遍歷范圍和集合。
我們一起來(lái)編寫(xiě)一個(gè)游戲“Rock、Paper、Scissors” 60
游戲設(shè)計(jì)概覽 61
讓程序選擇一個(gè)選項(xiàng) 63
如何創(chuàng)建函數(shù) 64
可以向函數(shù)中傳入多個(gè)值 65
可以從函數(shù)中返回一個(gè)值 66
單個(gè)表達(dá)式函數(shù) 67
向Game.kt中添加getGameChoice函數(shù) 68
getUserChoice函數(shù) 75
for循環(huán)工作原理 76
詢問(wèn)用戶的選擇 78
驗(yàn)證用戶的輸入 81
更強(qiáng)大的布爾表達(dá)式 81
向Game.kt中添加getUserChoice函數(shù) 83
向Game.kt中添加printResult函數(shù) 87
Kotlin工具箱 89
4 類和對(duì)象
初步認(rèn)識(shí)類
現(xiàn)在是時(shí)候了解一下Kotlin基本類型之外的類型了。
Kotlin的基本類型遲早會(huì)難以滿足你的需求,此時(shí),你就需要類的幫助。類是一個(gè)模板,它允許你創(chuàng)建自己的對(duì)象類型,并定義它們的屬性和函數(shù)。這里,你將要學(xué)習(xí)如何設(shè)計(jì)、定義類以及如何使用類來(lái)創(chuàng)建新的對(duì)象。你將會(huì)看到構(gòu)造函數(shù)、初始化程序塊、getter和setter,以及getter和setter是如何保護(hù)類的屬性的。最后,你將學(xué)習(xí)Kotlin是如何內(nèi)置數(shù)據(jù)隱藏功能,從而節(jié)省你的時(shí)間、精力和編碼量的。
使用類定義對(duì)象類型 92
如何設(shè)計(jì)自己的類 93
一起定義一個(gè)Dog類 94
如何創(chuàng)建Dog對(duì)象 95
如何訪問(wèn)屬性及函數(shù) 96
創(chuàng)建一個(gè)Songs應(yīng)用 97
神奇的對(duì)象創(chuàng)建 98
對(duì)象是如何創(chuàng)建的 99
現(xiàn)象背后:調(diào)用Dog構(gòu)造函數(shù) 100
深入了解屬性 105
靈活的屬性初始化 106
如何使用初始化塊 107
你必須初始化所有屬性 108
如何驗(yàn)證屬性值 111
如何編寫(xiě)自定義的getter 112
如何編寫(xiě)自定義的setter 113
Dogs項(xiàng)目的完整代碼 115
Kotlin工具箱 120
5 子類和父類
使用繼承
你是否曾經(jīng)想過(guò),只需要做一點(diǎn)點(diǎn)改變,對(duì)象的類型就會(huì)變得完美?
是的,這就是繼承的好處之一。在本章,你將學(xué)習(xí)如何創(chuàng)建子類,以及繼承父類的屬 性和方法。你將學(xué)會(huì)如何覆蓋(override)屬性和方法,從而使類表現(xiàn)出你想要的行 為,并弄清楚什么時(shí)候這樣做是合適的(或不合適的)。最后,你將學(xué)會(huì)如何利用繼 承避免代碼重復(fù),如何利用多態(tài)提高代碼靈活性。
繼承幫助你避免代碼重復(fù) 122
我們將要做什么 123
設(shè)計(jì)一個(gè)animal類繼承結(jié)構(gòu) 124
使用繼承避免子類中的代碼重復(fù) 125
子類應(yīng)該覆蓋什么 126
我們可以將一些動(dòng)物分類 127
添加Canine和Feline類 128
使用IS-A測(cè)試類的層次結(jié)構(gòu) 129
繼承樹(shù)中的任意子類都滿足IS-A測(cè)試 130
創(chuàng)建一些Kotlin動(dòng)物 133
使用open關(guān)鍵字聲明父類及它的屬性和方法 134
子類是如何繼承父類的 135
如何(以及何時(shí))覆蓋屬性 136
覆蓋屬性不僅僅讓你可以指定默認(rèn)值 137
如何覆蓋方法 138
被覆蓋的方法或?qū)傩匀匀皇莖pen的 139
向Animals項(xiàng)目中添加Hippo類 140
添加Canine和Wolf類 143
哪個(gè)方法被調(diào)用了 144
當(dāng)你調(diào)用方法時(shí),變量指向?qū)ο蟮姆椒ㄟM(jìn)行響應(yīng) 146
你可以使用父類型作為方法的參數(shù)和返回值類型 147
更新后的Animals代碼 148
Kotlin工具箱 153
6 抽象類和接口
重要的多態(tài)
父類繼承層次結(jié)構(gòu)只是一個(gè)開(kāi)始。
如果想充分利用多態(tài),你需要設(shè)計(jì)抽象類和接口。在本章中,你將學(xué)習(xí)如何使用抽象 類來(lái)控制層次結(jié)構(gòu)中的類能否被實(shí)例化。你將知道它們?nèi)绾螐?qiáng)制具體的子類提供自己 的實(shí)現(xiàn)。你將了解如何使用接口在相互獨(dú)立的類之間共享行為。在此過(guò)程中,你將了 解is、as和when的來(lái)龍去脈。
再談Animal類的層次結(jié)構(gòu) 156
一些類不能被實(shí)例化 157
抽象還是具體 158
抽象類可以有抽象屬性和方法 159
Animal類有兩個(gè)抽象方法 160
如何實(shí)現(xiàn)一個(gè)抽象類 162
你必須實(shí)現(xiàn)所有的抽象屬性和方法 163
更新Animals項(xiàng)目 164
獨(dú)立的類可以有共同的行為 169
接口可以讓你在父類層次結(jié)構(gòu)之外定義共同的行為 170
讓我們定義Roamable接口 171
如何定義接口屬性 172
聲明一個(gè)類實(shí)現(xiàn)了一個(gè)接口 173
如何實(shí)現(xiàn)多個(gè)接口 174
如何決定是創(chuàng)建類、子類、抽象類還是接口 175
更新Animals項(xiàng)目 176
接口讓你可以使用多態(tài) 181
在哪里使用is操作符 182
使用when將變量和一組選項(xiàng)進(jìn)行比較 183
is操作符通常會(huì)進(jìn)行智能轉(zhuǎn)換 184
使用as進(jìn)行顯式轉(zhuǎn)換 185
更新Animals項(xiàng)目 186
Kotlin工具箱 189
7 數(shù)據(jù)類
處理數(shù)據(jù)
沒(méi)人愿意花費(fèi)比生精力重新造輪子。
大多數(shù)應(yīng)用程序都包含一些主要用于存儲(chǔ)數(shù)據(jù)的類。為了使你的編程生活更輕松, Kotlin開(kāi)發(fā)者提出了數(shù)據(jù)類的概念。在這里,你將學(xué)習(xí)如何使用數(shù)據(jù)類編寫(xiě)更加 清晰、簡(jiǎn)潔的代碼。你將探索數(shù)據(jù)類工具函數(shù),并學(xué)會(huì)如何將一個(gè)數(shù)據(jù)對(duì)象解構(gòu) 成它的組件。在此過(guò)程中,你將了解默認(rèn)參數(shù)值如何使代碼更靈活。最后將為你
介紹Any,它是所有父類的起源。
==調(diào)用了equals方法 192
equals繼承自Any父類 193
Any類定義的共有行為 194
我們可能希望用equals檢查兩個(gè)對(duì)象是否等價(jià) 195
數(shù)據(jù)類允許你創(chuàng)建數(shù)據(jù)對(duì)象 196
數(shù)據(jù)類覆蓋了它們繼承的行為 197
使用copy方法復(fù)制數(shù)據(jù)對(duì)象 198
數(shù)據(jù)類定義了componentN方法 199
創(chuàng)建Recipes項(xiàng)目 201
生成的方法僅包含構(gòu)造函數(shù)中定義的屬性 205
初始化許多屬性可能會(huì)導(dǎo)致煩瑣的代碼 206
如何在構(gòu)造函數(shù)中設(shè)置默認(rèn)值 207
方法也可以使用默認(rèn)值 210
重載方法 211
更新Recipes項(xiàng)目 212
Kotlin工具箱 217
8 空值和異常
使代碼安然無(wú)恙
每個(gè)人都想編寫(xiě)安全的代碼。
好消息是Kotlin的設(shè)計(jì)本身就是代碼安全的。我們首先為你展示Kotlin如何使用可空類 型,這意味著你在Kotlin小城逗留期間幾乎不會(huì)遇到空指針異常。你將學(xué)習(xí)如何進(jìn)行安 全調(diào)用,以及如何使用Kotlin的Elvis操作符避免驚慌失措。當(dāng)我們介紹完空值后,你將 學(xué)會(huì)如何像專業(yè)人士那樣拋出和捕獲異常。
從變量中刪除對(duì)象引用 220
用空值刪除一個(gè)對(duì)象引用 221
你可以在任何能夠使用非可空類型的地方使用可空類型 222
創(chuàng)建一個(gè)可空類型的數(shù)組 223
訪問(wèn)可空類型的方法和屬性 224
通過(guò)安全調(diào)用確保一切安全 225
鏈?zhǔn)桨踩{(diào)用 226
你可以使用安全調(diào)用賦值 228
如果變量的值不為空,使用let執(zhí)行代碼 231
對(duì)數(shù)組項(xiàng)使用let 232
替代if表達(dá)式 233
使用!!操作符故意拋出NullPointerException 234
創(chuàng)建Null Values項(xiàng)目 235
在異常情況下拋出異常 239
使用try/catch捕獲異常 240
使用finally去做無(wú)論如何你都想做的事情 241
異常是Exception類型的對(duì)象 242
你可以顯式地拋出異常 244
try和throw都是表達(dá)式 245
Kotlin工具箱 250
9 集合
變得有條理
你想過(guò)比數(shù)組更靈活的東西嗎?
Kotlin有一些好用的集合類可以讓你在存儲(chǔ)和管理對(duì)象組方面有更多的靈活性和更強(qiáng)的 控制力。你想要可以不斷增加對(duì)象的可變列表嗎?你想要排序、打亂和倒序列表的內(nèi) 容嗎?你想要通過(guò)名字進(jìn)行檢索嗎?或者你想要不動(dòng)一根手指就實(shí)現(xiàn)自動(dòng)去重嗎?只 要你對(duì)以上任何一個(gè)功能感興趣,或者想要發(fā)掘更多有意思的功能,請(qǐng)繼續(xù)讀下去。 在本章你將找到答案。
有用的數(shù)組 252
數(shù)組不能處理的事情 253
Kotlin標(biāo)準(zhǔn)庫(kù) 254
List、Set和Map 255
奇妙的List 256
創(chuàng)建MutableList 257
移除一個(gè)值 258
改變?cè)仨樞蛞约芭扛?259
創(chuàng)建Collections項(xiàng)目 260
List允許重復(fù)項(xiàng) 263
如何創(chuàng)建Set 264
Set如何查重 265
哈希碼與相等性 266
覆蓋hashCode和equals的規(guī)則 267
如何使用MutableSet 268
復(fù)制MutableSet 269
更新Collections項(xiàng)目 270
Map的表演時(shí)間 276
如何使用Map 277
創(chuàng)建MutableMap 278
從MutableMap移除條目 279
拷貝Map和MutableMap 280
完整的Collections項(xiàng)目代碼 281
Kotlin工具箱 287
10 泛型
從輸出推斷輸入
人人都喜歡通用的代碼。
使用泛型是令代碼一致且不易出錯(cuò)的一種策略。在本章中,我們將看到Kotlin的集合類
如何利用泛型避免將Cabbage對(duì)象放入List。你將了解編寫(xiě)泛型類、接口和函 數(shù)的場(chǎng)景和方法,以及如何將泛型類型限制為特定的父類型。最后,你將學(xué)習(xí)利用協(xié) 變和逆變控制泛型類型的行為。
泛型在集合中的使用 290
如何定義MutableList 291
在MutableList中使用類型參數(shù) 292
通過(guò)泛型類或接口可以做什么 293 接下來(lái)要做的事 294
創(chuàng)建Pet類的層次結(jié)構(gòu) 295
定義Contest類 296
添加scores屬性 297
創(chuàng)建getWinners方法 298
創(chuàng)建一些Contest對(duì)象 299
創(chuàng)建Generics項(xiàng)目 301
Retailer層次結(jié)構(gòu) 305
定義Retailer接口 306
輕松創(chuàng)建CatRetailer、DogRetailer和FishRetailer等對(duì)象 307 用out使泛型類型協(xié)變 308
更新Generics項(xiàng)目 309
再定義一個(gè)Vet類 313
創(chuàng)建Vet對(duì)象 314
用in使泛型類型逆變 315
泛型類型的局部逆變 316
更新Generics項(xiàng)目 317
Kotlin工具箱 324
11 lambda和高階函數(shù)
像數(shù)據(jù)一樣使用代碼
你想要寫(xiě)出更強(qiáng)大、更靈活的代碼嗎?
如果是的,那么讓lambda來(lái)幫助你吧。一個(gè)lambda(或者lambda表達(dá)式)是像對(duì)象一 樣能被傳遞的代碼塊。在本章中,你將了解如何定義lambda,將它賦予某個(gè)變量,然 后執(zhí)行其中的代碼。你將學(xué)習(xí)利用函數(shù)類型在高階函數(shù)中使用lambda作為參數(shù)或者返 回值。最終,你將見(jiàn)證小小的語(yǔ)法糖給寫(xiě)代碼帶來(lái)的樂(lè)趣。
初識(shí)lambda 326
lambda的代碼格式 327
將lambda賦值給變量 328
調(diào)用lambda時(shí)會(huì)發(fā)生什么 329
lambda表達(dá)式類型 331
lambda參數(shù)類型的自動(dòng)解析 332
根據(jù)變量類型使用正確的lambda 333
創(chuàng)建Lambdas項(xiàng)目 334
將lambda作為函數(shù)參數(shù) 339
在函數(shù)體中調(diào)用lambda 340
代碼運(yùn)行時(shí)發(fā)生了什么 341
將lambda移到函數(shù)括號(hào)外面 343
更新Lambdas項(xiàng)目 344
函數(shù)可以返回一個(gè)lambda 347
將lambda作為函數(shù)參數(shù)和返回值 348
如何使用combine函數(shù) 349
用typealias為已存在的類型取別名 353
更新Lambdas項(xiàng)目 354
Kotlin工具箱 361
12 內(nèi)置高階函數(shù)
使你的代碼更強(qiáng)大
Kotlin提供完整的內(nèi)置高階函數(shù)庫(kù)。
本章我們將介紹一些最常用的高階函數(shù)。你將見(jiàn)到靈活的過(guò)濾器家族,并了解它們?nèi)?何幫你剪裁集合。你將學(xué)會(huì)如何用map對(duì)集合進(jìn)行轉(zhuǎn)換,用forEach對(duì)集合進(jìn)行遍歷, 以及用groupBy對(duì)集合元素進(jìn)行分組。甚至依靠fold用一行代碼完成復(fù)雜的計(jì)算。學(xué)完 本章,你的編程能力將比你想象的更厲害。
Kotlin的內(nèi)置高階函數(shù) 364
用min和max函數(shù)處理基礎(chǔ)類型 365
深入理解minBy和maxBy的lambda參數(shù)設(shè)置 366
sumBy與sumByDouble函數(shù) 367
創(chuàng)建Groceries項(xiàng)目 368
走近filter函數(shù) 371
使用map轉(zhuǎn)換集合 372
代碼運(yùn)行時(shí)發(fā)生了什么 373
像for循環(huán)的forEach 375
forEach沒(méi)有返回值 376
更新Groceries項(xiàng)目 377
使用groupBy劃分集合 381
在鏈?zhǔn)秸{(diào)用中使用groupBy 382
如何使用fold函數(shù) 383
fold函數(shù)背后的故事 384
再舉幾個(gè)fold函數(shù)的例子 386
更新Groceries項(xiàng)目 387
Kotlin工具箱 394
附錄i 協(xié)程
并行地執(zhí)行代碼
有些任務(wù)最好在后臺(tái)執(zhí)行。
如果你想要從一個(gè)慢速的外部服務(wù)器讀取數(shù)據(jù),你可能不希望其余代碼處于空閑狀態(tài),等待讀取任務(wù)的完成。在這種情況下,協(xié)程(coroutine)將成為你新的死黨,它可以讓代碼異步執(zhí)行。這意味著更少的空閑狀態(tài),更好的用戶體驗(yàn),而且可以使你的應(yīng)用程序易于擴(kuò)展。繼續(xù)往下閱讀,你將學(xué)習(xí)其中的秘訣:如何在與Bob交談的同時(shí)又傾聽(tīng)Suzy。
附錄ii 測(cè)試
確保你的代碼可以運(yùn)行
眾所周知好的代碼是可以支行的。
但是,你所做的任何修改都有可能引入新的錯(cuò)誤,阻止你的代碼正常運(yùn)行。這就是全面測(cè)試如此重要的原因:這意味著你能夠在代碼部署到生產(chǎn)環(huán)境之前,知曉其中的任何問(wèn)題。在本附錄中,我們將討論JUnit和KotlinTest,你可以使用這兩個(gè)庫(kù)進(jìn)行單元測(cè)試,保障代碼安全。
附錄iii 其他
我們沒(méi)有涉及的十大內(nèi)容
除此之外,還有更多需要學(xué)習(xí)。
盡管我們已經(jīng)學(xué)習(xí)了很多知識(shí),然而還是有很多內(nèi)容未被包含在本書(shū)中。 我們認(rèn)為還有一些知識(shí)點(diǎn)是你需要掌握的。忽略這些內(nèi)容是我們的不對(duì),然而我們真的很想為你呈現(xiàn)一本能夠輕松上手的書(shū)。在你放下本書(shū)之前,還請(qǐng)仔細(xì)閱讀這些花絮。
1. 包和導(dǎo)入 416
2. 可見(jiàn)性修飾符 418
3. 枚舉類 420
4. 密封類 422
5. 嵌套類和內(nèi)部類 424
6. 對(duì)象聲明和表達(dá)式 426
7. 擴(kuò)展 429
8. return、break和continue 430
9. 更多關(guān)于函數(shù)的知識(shí) 432
10. Kotlin和其他語(yǔ)言的互操作性 434