關(guān)于我們
書(shū)單推薦
新書(shū)推薦
|
Head First Kotlin程序設(shè)計(jì)
本書(shū)介紹了Kotlin的基本語(yǔ)法、常用類(lèi)型、面向?qū)ο缶幊桃约耙恍└唠A的知識(shí)。在所有的章節(jié)中,都廣泛使用圖片和會(huì)話的介紹方式,以幫助大腦更容易理解和獲取信息。此外還有各種生動(dòng)的實(shí)例、習(xí)題,以及有問(wèn)必答環(huán)節(jié)。讓讀者仿佛置身其中,更加高效專(zhuān)注地學(xué)習(xí)知識(shí),而把一些無(wú)關(guān)緊要的事情拋之腦后。本書(shū)以類(lèi)似于“劃重點(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 基本類(lèi)型和變量:關(guān)于變量 31 3 函數(shù):跳出主函數(shù) 59 4 類(lèi)和對(duì)象:初步認(rèn)識(shí)類(lèi) 91 5 子類(lèi)和父類(lèi):使用繼承 121 6 抽象類(lèi)和接口:重要的多態(tài) 155 7 數(shù)據(jù)類(lèi):處理數(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 基本類(lèi)型和變量 關(guān)于變量 所有代碼都依賴(lài)于——變量 本章我們將進(jìn)一步探索Kotlin,并且向你展示Kotlin變量是如何工作的。你會(huì)學(xué)習(xí)Kotlin的基本類(lèi)型,例如整型(Int)、浮點(diǎn)型(Float)和布爾型(Boolean),并且學(xué)習(xí)Kotlin的編譯器是如何聰明地從給定的變量值推測(cè)出變量類(lèi)型的。你還將學(xué)會(huì)如何使用String模板和簡(jiǎn)短的代碼來(lái)構(gòu)建復(fù)雜的String類(lèi)型,并且學(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的基本類(lèi)型 35 如何顯式聲明變量類(lèi)型 37 根據(jù)變量類(lèi)型正確賦值 38 將一個(gè)變量值賦給另一個(gè)變量 39 類(lèi)型轉(zhuǎn)換 40 數(shù)值類(lèi)型轉(zhuǎn)換背后發(fā)生了什么 41 小心溢出 42 使用數(shù)組存放多個(gè)值 45 創(chuàng)建Phrase-O-Matic應(yīng)用程序 46 向PhraseOMatic.kt中添加代碼 47 編譯器從數(shù)組中元素的值來(lái)推測(cè)數(shù)組的類(lèi)型 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 類(lèi)和對(duì)象 初步認(rèn)識(shí)類(lèi) 現(xiàn)在是時(shí)候了解一下Kotlin基本類(lèi)型之外的類(lèi)型了。 Kotlin的基本類(lèi)型遲早會(huì)難以滿足你的需求,此時(shí),你就需要類(lèi)的幫助。類(lèi)是一個(gè)模板,它允許你創(chuàng)建自己的對(duì)象類(lèi)型,并定義它們的屬性和函數(shù)。這里,你將要學(xué)習(xí)如何設(shè)計(jì)、定義類(lèi)以及如何使用類(lèi)來(lái)創(chuàng)建新的對(duì)象。你將會(huì)看到構(gòu)造函數(shù)、初始化程序塊、getter和setter,以及getter和setter是如何保護(hù)類(lèi)的屬性的。最后,你將學(xué)習(xí)Kotlin是如何內(nèi)置數(shù)據(jù)隱藏功能,從而節(jié)省你的時(shí)間、精力和編碼量的。 使用類(lèi)定義對(duì)象類(lèi)型 92 如何設(shè)計(jì)自己的類(lèi) 93 一起定義一個(gè)Dog類(lèi) 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 子類(lèi)和父類(lèi) 使用繼承 你是否曾經(jīng)想過(guò),只需要做一點(diǎn)點(diǎn)改變,對(duì)象的類(lèi)型就會(huì)變得完美? 是的,這就是繼承的好處之一。在本章,你將學(xué)習(xí)如何創(chuàng)建子類(lèi),以及繼承父類(lèi)的屬 性和方法。你將學(xué)會(huì)如何覆蓋(override)屬性和方法,從而使類(lèi)表現(xiàn)出你想要的行 為,并弄清楚什么時(shí)候這樣做是合適的(或不合適的)。最后,你將學(xué)會(huì)如何利用繼 承避免代碼重復(fù),如何利用多態(tài)提高代碼靈活性。 繼承幫助你避免代碼重復(fù) 122 我們將要做什么 123 設(shè)計(jì)一個(gè)animal類(lèi)繼承結(jié)構(gòu) 124 使用繼承避免子類(lèi)中的代碼重復(fù) 125 子類(lèi)應(yīng)該覆蓋什么 126 我們可以將一些動(dòng)物分類(lèi) 127 添加Canine和Feline類(lèi) 128 使用IS-A測(cè)試類(lèi)的層次結(jié)構(gòu) 129 繼承樹(shù)中的任意子類(lèi)都滿足IS-A測(cè)試 130 創(chuàng)建一些Kotlin動(dòng)物 133 使用open關(guān)鍵字聲明父類(lèi)及它的屬性和方法 134 子類(lèi)是如何繼承父類(lèi)的 135 如何(以及何時(shí))覆蓋屬性 136 覆蓋屬性不僅僅讓你可以指定默認(rèn)值 137 如何覆蓋方法 138 被覆蓋的方法或?qū)傩匀匀皇莖pen的 139 向Animals項(xiàng)目中添加Hippo類(lèi) 140 添加Canine和Wolf類(lèi) 143 哪個(gè)方法被調(diào)用了 144 當(dāng)你調(diào)用方法時(shí),變量指向?qū)ο蟮姆椒ㄟM(jìn)行響應(yīng) 146 你可以使用父類(lèi)型作為方法的參數(shù)和返回值類(lèi)型 147 更新后的Animals代碼 148 Kotlin工具箱 153 6 抽象類(lèi)和接口 重要的多態(tài) 父類(lèi)繼承層次結(jié)構(gòu)只是一個(gè)開(kāi)始。 如果想充分利用多態(tài),你需要設(shè)計(jì)抽象類(lèi)和接口。在本章中,你將學(xué)習(xí)如何使用抽象 類(lèi)來(lái)控制層次結(jié)構(gòu)中的類(lèi)能否被實(shí)例化。你將知道它們?nèi)绾螐?qiáng)制具體的子類(lèi)提供自己 的實(shí)現(xiàn)。你將了解如何使用接口在相互獨(dú)立的類(lèi)之間共享行為。在此過(guò)程中,你將了 解is、as和when的來(lái)龍去脈。 再談Animal類(lèi)的層次結(jié)構(gòu) 156 一些類(lèi)不能被實(shí)例化 157 抽象還是具體 158 抽象類(lèi)可以有抽象屬性和方法 159 Animal類(lèi)有兩個(gè)抽象方法 160 如何實(shí)現(xiàn)一個(gè)抽象類(lèi) 162 你必須實(shí)現(xiàn)所有的抽象屬性和方法 163 更新Animals項(xiàng)目 164 獨(dú)立的類(lèi)可以有共同的行為 169 接口可以讓你在父類(lèi)層次結(jié)構(gòu)之外定義共同的行為 170 讓我們定義Roamable接口 171 如何定義接口屬性 172 聲明一個(gè)類(lèi)實(shí)現(xiàn)了一個(gè)接口 173 如何實(shí)現(xiàn)多個(gè)接口 174 如何決定是創(chuàng)建類(lèi)、子類(lèi)、抽象類(lèi)還是接口 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ù)類(lèi) 處理數(shù)據(jù) 沒(méi)人愿意花費(fèi)比生精力重新造輪子。 大多數(shù)應(yīng)用程序都包含一些主要用于存儲(chǔ)數(shù)據(jù)的類(lèi)。為了使你的編程生活更輕松, Kotlin開(kāi)發(fā)者提出了數(shù)據(jù)類(lèi)的概念。在這里,你將學(xué)習(xí)如何使用數(shù)據(jù)類(lèi)編寫(xiě)更加 清晰、簡(jiǎn)潔的代碼。你將探索數(shù)據(jù)類(lèi)工具函數(shù),并學(xué)會(huì)如何將一個(gè)數(shù)據(jù)對(duì)象解構(gòu) 成它的組件。在此過(guò)程中,你將了解默認(rèn)參數(shù)值如何使代碼更靈活。最后將為你 介紹Any,它是所有父類(lèi)的起源。 ==調(diào)用了equals方法 192 equals繼承自Any父類(lèi) 193 Any類(lèi)定義的共有行為 194 我們可能希望用equals檢查兩個(gè)對(duì)象是否等價(jià) 195 數(shù)據(jù)類(lèi)允許你創(chuàng)建數(shù)據(jù)對(duì)象 196 數(shù)據(jù)類(lèi)覆蓋了它們繼承的行為 197 使用copy方法復(fù)制數(shù)據(jù)對(duì)象 198 數(shù)據(jù)類(lèi)定義了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如何使用可空類(lèi) 型,這意味著你在Kotlin小城逗留期間幾乎不會(huì)遇到空指針異常。你將學(xué)習(xí)如何進(jìn)行安 全調(diào)用,以及如何使用Kotlin的Elvis操作符避免驚慌失措。當(dāng)我們介紹完空值后,你將 學(xué)會(huì)如何像專(zhuān)業(yè)人士那樣拋出和捕獲異常。 從變量中刪除對(duì)象引用 220 用空值刪除一個(gè)對(duì)象引用 221 你可以在任何能夠使用非可空類(lèi)型的地方使用可空類(lèi)型 222 創(chuàng)建一個(gè)可空類(lèi)型的數(shù)組 223 訪問(wèn)可空類(lèi)型的方法和屬性 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類(lèi)型的對(duì)象 242 你可以顯式地拋出異常 244 try和throw都是表達(dá)式 245 Kotlin工具箱 250 9 集合 變得有條理 你想過(guò)比數(shù)組更靈活的東西嗎? Kotlin有一些好用的集合類(lèi)可以讓你在存儲(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的集合類(lèi) 如何利用泛型避免將Cabbage對(duì)象放入List 泛型在集合中的使用 290 如何定義MutableList 291 在MutableList中使用類(lèi)型參數(shù) 292 通過(guò)泛型類(lèi)或接口可以做什么 293 接下來(lái)要做的事 294 創(chuàng)建Pet類(lèi)的層次結(jié)構(gòu) 295 定義Contest類(lèi) 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使泛型類(lèi)型協(xié)變 308 更新Generics項(xiàng)目 309 再定義一個(gè)Vet類(lèi) 313 創(chuàng)建Vet對(duì)象 314 用in使泛型類(lèi)型逆變 315 泛型類(lèi)型的局部逆變 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ù)類(lèi)型在高階函數(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á)式類(lèi)型 331 lambda參數(shù)類(lèi)型的自動(dòng)解析 332 根據(jù)變量類(lèi)型使用正確的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為已存在的類(lèi)型取別名 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ǔ)類(lèi)型 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. 枚舉類(lèi) 420 4. 密封類(lèi) 422 5. 嵌套類(lèi)和內(nèi)部類(lèi) 424 6. 對(duì)象聲明和表達(dá)式 426 7. 擴(kuò)展 429 8. return、break和continue 430 9. 更多關(guān)于函數(shù)的知識(shí) 432 10. Kotlin和其他語(yǔ)言的互操作性 434
你還可能感興趣
我要評(píng)論
|