關(guān)于我們
書(shū)單推薦
新書(shū)推薦
|
Kotlin編程實(shí)戰(zhàn):創(chuàng)建優(yōu)雅、富于表現(xiàn)力和高性能的JVM與Android應(yīng)用程序 本書(shū)面向程序員、開(kāi)發(fā)主管、架構(gòu)師和技術(shù)經(jīng)理。假定讀者熟悉編程的基礎(chǔ)知識(shí),同時(shí)也假定讀者對(duì)Java和JDK有一定的了解。 第I部分主要介紹使用Kotlin編寫(xiě)腳本。 第II部分是關(guān)于面向?qū)ο蟮木幊獭?/p> 第III部分,你將學(xué)習(xí)如何使用該語(yǔ)言的函數(shù)風(fēng)格的功能。 第IV部分將把目前為止所學(xué)的知識(shí)結(jié)合起來(lái),使你的代碼更加流暢,并教會(huì)你如何創(chuàng)建內(nèi)部領(lǐng)域特定語(yǔ)言(DSL)。 在第V部分中,你將了解新的協(xié)程和異步編程。 第VI部分涉及Java的互操作、測(cè)試、使用帶有Spring的Kotlin,以及使用Kotlin編寫(xiě)Android應(yīng)用程序。 適讀人群 :程序員、開(kāi)發(fā)主管、架構(gòu)師和技術(shù)經(jīng)理以及其他對(duì)Kotlin感興趣的讀者 Kotlin是一種高度簡(jiǎn)潔、優(yōu)雅、流暢和富有表現(xiàn)力的﹑靜態(tài)類(lèi)型的多范式語(yǔ)言。它是為數(shù)不多的可同時(shí)編譯成Java字節(jié)碼和JavaScript的語(yǔ)言之一。谷歌也將其作為Android開(kāi)發(fā)的一流語(yǔ)言。使用Kotlin,你可以混合使用命令式、函數(shù)式和面向?qū)ο蟮木幊田L(fēng)格,并從適合當(dāng)前問(wèn)題的方法中獲益。你可以用它來(lái)構(gòu)建服務(wù)器端、前端以及Android應(yīng)用程序。而且完成任務(wù)所需的代碼更少,同時(shí)又可以保證代碼類(lèi)型安全且更不容易出錯(cuò)。
本書(shū)的目標(biāo)讀者 本書(shū)內(nèi)容 以下是每章所涵蓋的內(nèi)容。 第3章將探索這些與函數(shù)相關(guān)的功能。 第4章介紹Kotlin的迭代器如何使任務(wù)變得可以忍受,以及參數(shù)匹配語(yǔ)法如何從條件語(yǔ)句中消除大量的干擾。 第5章將向你展示如何使用視圖接口來(lái)處理Kotlin的JDK集合。 第6章將介紹Kotlin的基本類(lèi)型、可空和不可空引用、智能類(lèi)型轉(zhuǎn)換等。 第7章將學(xué)習(xí)創(chuàng)建單例、類(lèi)、伴生對(duì)象,以及使用數(shù)據(jù)類(lèi)的原因。 作為直接支持委托的語(yǔ)言之一,Kotlin提供了一些內(nèi)置的委托,并且使創(chuàng)建自定義委托變得更加容易。 第9章將首先討論何時(shí)以及為何使用委托,然后深入討論如何使用委托。 第10章將學(xué)習(xí)如何創(chuàng)建lambda表達(dá)式和編寫(xiě)高階函數(shù)。我們還將介紹Kotlin提供的用來(lái)消除函數(shù)調(diào)用開(kāi)銷(xiāo)并提高性能的工具。 第12章將展示Kotlin用于創(chuàng)建簡(jiǎn)潔、流暢、優(yōu)雅和富于表現(xiàn)力的代碼的許多能力。 第13章介紹如何創(chuàng)建內(nèi)部DSL,為你的專用語(yǔ)言定義你自己的語(yǔ)法。 我們將在第14章中看到它的實(shí)際應(yīng)用,以及使用記憶來(lái)降低計(jì)算的復(fù)雜性。 第16章介紹應(yīng)用協(xié)程來(lái)創(chuàng)建實(shí)際的應(yīng)用程序,這些應(yīng)用程序可以從異步程序執(zhí)行中獲益。 在第17章中,你將學(xué)習(xí)如何將Kotlin與Java混合使用,如何在Java的現(xiàn)代版本中使用Kotlin—即使用Java模塊,如何將其與Maven和Gradle一起使用,以及如何在同一個(gè)應(yīng)用程序中順利地使用Java和Kotlin。 第19章將探索面向Kotlin程序員的Spring庫(kù)以及這些庫(kù)所提供的獨(dú)特功能。 最后,在第20章中,我們將使用Kotlin創(chuàng)建一個(gè)與后端服務(wù)對(duì)話的Android應(yīng)用程序。 本書(shū)所使用的Kotlin和Java版本 如何閱讀代碼示例 Venkat Subramaniam博士是一位獲獎(jiǎng)作家,Agile Developer公司的創(chuàng)始人,休斯敦大學(xué)的教學(xué)型教授。他在北美洲、歐洲和亞洲培訓(xùn)和指導(dǎo)了數(shù)千名軟件開(kāi)發(fā)人員,并定期應(yīng)邀在國(guó)際會(huì)議上發(fā)言。他是多本書(shū)的作者(合著者),包括2007年獲得Jolt Productivity獎(jiǎng)的Practices of an Agile Developer一書(shū)。 第1章 你好Kotlin1 1.1 愛(ài)上Kotlin的理由2 1.1.1 多范式編程3 1.1.2 具有類(lèi)型推斷的靜態(tài)類(lèi)型4 1.2 為什么選擇Kotlin5 1.3 帶Kotlin去兜兜風(fēng)5 1.3.1 安裝Kotlin SDK6 1.3.2 驗(yàn)證安裝6 1.4 編譯成字節(jié)碼并運(yùn)行7 1.4.1 在命令行上運(yùn)行7 1.4.2 在IDE中運(yùn)行8 1.4.3 使用REPL進(jìn)行實(shí)驗(yàn)8 1.4.4 作為腳本運(yùn)行9 1.5 編譯成其他目標(biāo)11 1.6 選擇哪個(gè)選項(xiàng)11 1.7 本章小結(jié)12 【第一部分 使用Kotlin編寫(xiě)腳本】 第2章 從Java角度了解Kotlin的基本知識(shí)14 2.1 減少輸入15 2.1.1 分號(hào)是可選的15 2.1.2 變量類(lèi)型規(guī)范是可選的15 2.1.3 類(lèi)和函數(shù)是可選的17 2.1.4 try-catch是可選的18 2.2 合理的警告19 2.3 選擇val而不是var20 2.4 改進(jìn)的相等性檢查21 2.5 字符串模板23 2.6 原始字符串24 2.6.1 沒(méi)有轉(zhuǎn)義24 2.6.2 多行字符串24 2.7 更多的表達(dá)式,更少的語(yǔ)句26 2.8 本章小結(jié)28 第3章 使用函數(shù)29 3.1 創(chuàng)建函數(shù)30 3.1.1 KISS函數(shù)30 3.1.2 返回類(lèi)型和類(lèi)型推斷30 3.1.3 所有的函數(shù)都是表達(dá)式31 3.1.4 定義參數(shù)32 3.1.5 帶有塊體的函數(shù)33 3.2 默認(rèn)參數(shù)和命名參數(shù)34 3.2.1 演化帶有默認(rèn)參數(shù)的函數(shù)34 3.2.2 使用命名參數(shù)提高可讀性35 3.3 vararg和spread37 3.3.1 可變數(shù)量的實(shí)參37 3.3.2 spread運(yùn)算符38 3.4 解構(gòu)39 3.5 本章小結(jié)40 第4章 外部迭代和參數(shù)匹配42 4.1 范圍與迭代43 4.1.1 范圍類(lèi)43 4.1.2 正向迭代43 4.1.3 反向迭代44 4.1.4 跳過(guò)范圍內(nèi)的值44 4.2 遍歷數(shù)組和列表45 4.3 何時(shí)應(yīng)該使用when47 4.3.1 when用作表達(dá)式47 4.3.2 when用作語(yǔ)句49 4.3.3 when和變量的作用域49 4.4 本章小結(jié)50 第5章 使用集合51 5.1 集合的類(lèi)型51 5.1.1 Kotlin所添加的便利方法52 5.1.2 視圖53 5.2 使用Pair和Triple53 5.3 對(duì)象和基元數(shù)組55 5.4 使用列表56 5.5 使用集合59 5.6 使用映射59 5.7 本章小結(jié)61 第6章 使用類(lèi)型安全性解決問(wèn)題63 6.1 Any和Nothing類(lèi)64 6.1.1 Any是基類(lèi)64 6.1.2 Nothing比void更深入65 6.2 可空的引用65 6.2.1 null是件不好的事66 6.2.2 使用可空類(lèi)型67 6.2.3 安全調(diào)用運(yùn)算符69 6.2.4 Elvis運(yùn)算符69 6.2.5 不要使用不安全的斷言運(yùn)算符70 6.2.6 使用when71 6.3 類(lèi)型檢查和轉(zhuǎn)換72 6.3.1 類(lèi)型檢查72 6.3.2 使用is72 6.3.3 智能轉(zhuǎn)換73 6.3.4 使用帶有when的類(lèi)型檢查和智能轉(zhuǎn)換75 6.4 顯式類(lèi)型轉(zhuǎn)換75 6.5 泛型:參數(shù)類(lèi)型的變化和約束77 6.5.1 類(lèi)型不變性77 6.5.2 使用協(xié)變79 6.5.3 使用逆變81 6.5.4 使用where的參數(shù)類(lèi)型約束82 6.5.5 星投影83 6.6 具體化的類(lèi)型參數(shù)84 6.7 本章小結(jié)86 【第二部分 面向?qū)ο蟮腒otlin】 第7章 對(duì)象和類(lèi)88 7.1 對(duì)象和單例88 7.1.1 帶有對(duì)象表達(dá)式的匿名對(duì)象89 7.1.2 帶有對(duì)象聲明的單例91 7.1.3 頂級(jí)函數(shù)與單例92 7.2 創(chuàng)建類(lèi)93 7.2.1 最小的類(lèi)94 7.2.2 只讀屬性94 7.2.3 創(chuàng)建實(shí)例94 7.2.4 讀寫(xiě)屬性95 7.2.5 底層探秘—字段和屬性95 7.3 伴生對(duì)象和類(lèi)成員102 7.3.1 類(lèi)級(jí)別成員102 7.3.2 訪問(wèn)同伴103 7.3.3 Companion作為Factory103 7.3.4 不是非常靜態(tài)的104 7.4 創(chuàng)建泛型類(lèi)105 7.5 數(shù)據(jù)類(lèi)106 7.6 本章小結(jié)108 第8章 類(lèi)層次結(jié)構(gòu)和繼承110 8.1 創(chuàng)建接口和抽象類(lèi)110 8.1.1 創(chuàng)建接口111 8.1.2 創(chuàng)建抽象類(lèi)113 8.1.3 是接口還是抽象類(lèi)113 8.2 嵌套類(lèi)和內(nèi)部類(lèi)114 8.3 繼承116 8.4 Sealed類(lèi)119 8.5 創(chuàng)建和使用枚舉120 8.6 本章小結(jié)122 第9章 通過(guò)委托進(jìn)行擴(kuò)展124 9.1 何時(shí)選擇委托而不是繼承125 9.2 使用委托進(jìn)行設(shè)計(jì)126 9.2.1 一個(gè)設(shè)計(jì)問(wèn)題126 9.2.2 繼承的錯(cuò)誤指向127 9.2.3 委托—艱難的方式128 9.2.4 使用Kotlin的by來(lái)進(jìn)行委托129 9.3 委托給一個(gè)參數(shù)130 9.4 處理方法沖突131 9.5 Kotlin委托的注意事項(xiàng)133 9.6 委托變量和屬性135 9.6.1 委托變量135 9.6.2 委托屬性137 9.7 內(nèi)置的標(biāo)準(zhǔn)委托139 9.7.1 有點(diǎn)兒懶惰也沒(méi)關(guān)系140 9.7.2 Observable委托141 9.7.3 行使你的可否決權(quán)利142 9.8 本章小結(jié)143 【第三部分 函數(shù)式Kotlin】 第10章 使用lambda進(jìn)行函數(shù)式編程146 10.1 函數(shù)式風(fēng)格146 10.1.1 什么是函數(shù)式風(fēng)格147 10.1.2 為什么以及何時(shí)使用函數(shù)式風(fēng)格148 10.2 lambda表達(dá)式149 10.2.1 lambda的結(jié)構(gòu)149 10.2.2 傳遞lambda150 10.2.3 使用隱式參數(shù)151 10.2.4 接收l(shuí)ambda151 10.2.5 用lambda作為最后一個(gè)參數(shù)151 10.2.6 使用函數(shù)引用152 10.2.7 函數(shù)返回函數(shù)154 10.3 lambda和匿名函數(shù)155 10.4 閉包和詞法作用域157 10.5 非局部和帶標(biāo)簽的return158 10.5.1 默認(rèn)情況下不允許使用return 158 10.5.2 帶標(biāo)簽的return159 10.5.3 非局部return161 10.6 帶有l(wèi)ambda的內(nèi)聯(lián)函數(shù)163 10.6.1 默認(rèn)情況下沒(méi)有內(nèi)聯(lián)優(yōu)化163 10.6.2 內(nèi)聯(lián)優(yōu)化164 10.6.3 對(duì)參數(shù)精心選擇noinline 165 10.6.4 內(nèi)聯(lián)lambda中允許非局部return166 10.6.5 crossinline參數(shù)167 10.6.6 inline和return的良好實(shí)踐168 10.7 本章小結(jié)169 第11章 內(nèi)部迭代和延遲計(jì)算170 11.1 外部迭代器與內(nèi)部迭代器171 11.2 內(nèi)部迭代器172 11.2.1 filter、map和reduce172 11.2.2 得到第一個(gè)和最后一個(gè)174 11.2.3 flatten和flatMap175 11.2.4 排序177 11.2.5 將對(duì)象進(jìn)行分組177 11.3 延遲計(jì)算序列178 11.3.1 使用序列提高性能179 11.3.2 無(wú)限序列181 11.4 本章小結(jié)183 【第四部分 優(yōu)雅且高效的Kotlin】 第12章 Kotlin的流暢性186 12.1 重載運(yùn)算符187 12.2 使用擴(kuò)展函數(shù)和屬性進(jìn)行注入190 12.2.1 使用擴(kuò)展函數(shù)注入方法190 12.2.2 使用擴(kuò)展函數(shù)注入運(yùn)算符191 12.2.3 使用擴(kuò)展屬性注入屬性192 12.2.4 注入第三方類(lèi)192 12.2.5 注入靜態(tài)方法195 12.2.6 從類(lèi)內(nèi)注入195 12.3 擴(kuò)展函數(shù)197 12.4 帶中綴的函數(shù)流暢性198 12.5 帶Any對(duì)象的流暢性199 12.5.1 四種方法的行為200 12.5.2 來(lái)自冗長(zhǎng)和混亂的代碼201 12.5.3 使用apply刪除重復(fù)的引用202 12.5.4 使用run獲得結(jié)果203 12.5.5 使用let將對(duì)象作為參數(shù)傳遞203 12.5.6 使用also將void函數(shù)鏈接起來(lái)205 12.6 隱式接收方206 12.6.1 傳遞一個(gè)接收方206 12.6.2 帶接收方的多個(gè)作用域207 12.7 本章小結(jié)209 第13章 創(chuàng)建內(nèi)部DSL210 13.1 DSL的類(lèi)型和特征211 13.1.1 外部DSL與內(nèi)部DSL211 13.1.2 語(yǔ)境驅(qū)動(dòng)和流暢211 13.2 用于內(nèi)部DSL的Kotlin211 13.2.1 分號(hào)可選212 13.2.2 點(diǎn)和圓括號(hào)不與中綴在一起212 13.2.3 使用擴(kuò)展函數(shù)獲得特定的域212 13.2.4 傳遞lambda不需要圓括號(hào)213 13.2.5 隱式接收方影響DSL的創(chuàng)建213 13.2.6 還有一些特性可以幫助DSL214 13.3 構(gòu)建流暢性方面的挑戰(zhàn)214 13.3.1 使用擴(kuò)展函數(shù)215 13.3.2 使用接收方和中綴216 13.4 類(lèi)型安全構(gòu)建器220 13.4.1 HTML構(gòu)建器220 13.4.2 XML構(gòu)建器222 13.5 使用作用域控制來(lái)縮小訪問(wèn)范圍225 13.6 本章小結(jié)227 第14章 編寫(xiě)遞歸和記憶228 14.1 遞歸的威力和危險(xiǎn)228 14.2 尾調(diào)用優(yōu)化230 14.3 記憶232 14.3.1 重復(fù)計(jì)算233 14.3.2 記憶—Kotlin中的Groovy方法234 14.3.3 記憶作為委托235 14.4 將記憶應(yīng)用于動(dòng)態(tài)規(guī)劃237 14.5 本章小結(jié)238 【第五部分 編寫(xiě)異步應(yīng)用程序】 第15章 探索協(xié)程242 15.1 協(xié)程和并發(fā)242 15.1.1 并行與并發(fā)243 15.1.2 協(xié)程作為協(xié)作函數(shù)243 15.2 使用協(xié)程并發(fā)運(yùn)行244 15.2.1 從順序執(zhí)行開(kāi)始244 15.2.2 創(chuàng)建一個(gè)協(xié)程245 15.2.3 啟動(dòng)一個(gè)任務(wù)246 15.2.4 與掛起點(diǎn)交錯(cuò)調(diào)用247 15.3 協(xié)程上下文和線程249 15.3.1 顯式設(shè)置上下文249 15.3.2 在自定義池中運(yùn)行250 15.3.3 在掛起點(diǎn)后切換線程251 15.3.4 修改CoroutineContext253 15.4 調(diào)試協(xié)程254 15.4.1 async 和await255 15.4.2 看一眼延續(xù)256 15.5 創(chuàng)建無(wú)限序列258 15.5.1 使用序列258 15.5.2 使用iterator函數(shù)259 15.6 本章小結(jié)261 第16章 異步編程262 16.1 非阻塞異步編程262 16.1.1 按順序開(kāi)始262 16.1.2 進(jìn)行異步264 16.2 異常處理266 16.2.1 啟動(dòng)和異常266 16.2.2 異步和異常268 16.3 取消和超時(shí)270 16.3.1 取消協(xié)程270 16.3.2 請(qǐng)勿打擾273 16.3.3 雙向取消274 16.3.4 監(jiān)督作業(yè)275 16.3.5 編程時(shí)使用超時(shí)276 16.4 本章小結(jié)277 【第六部分 互操作和測(cè)試】 第17章 將Java與Kotlin混合使用280 17.1 聯(lián)合編譯280 17.2 從Kotlin調(diào)用Java283 17.3 從Java調(diào)用Kotlin286 17.3.1 使用Java中的重載運(yùn)算符287 17.3.2 創(chuàng)建靜態(tài)方法288 17.3.3 傳遞lambda289 17.3.4 添加throws子句290 17.3.5 使用帶默認(rèn)參數(shù)的函數(shù)292 17.3.6 訪問(wèn)頂級(jí)函數(shù)293 17.3.7 更多注釋294 17.4 本章小結(jié)294 第18章 使用Kotlin進(jìn)行單元測(cè)試296 18.1 被測(cè)試的代碼296 18.2 獲取項(xiàng)目文件297 18.2.1 設(shè)置Gradle298 18.2.2 設(shè)置Maven300 18.3 從Canary測(cè)試開(kāi)始300 18.4 編寫(xiě)經(jīng)驗(yàn)測(cè)試301 18.5 編寫(xiě)數(shù)據(jù)驅(qū)動(dòng)的測(cè)試304 18.6 模擬依賴項(xiàng)305 18.6.1 創(chuàng)建交互測(cè)試306 18.6.2 測(cè)試解析數(shù)據(jù)308 18.7 測(cè)試頂級(jí)函數(shù)310 18.8 測(cè)試協(xié)程和異步調(diào)用313 18.9 與服務(wù)集成316 18.10 查看代碼覆蓋率317 18.11 將應(yīng)用程序用于驅(qū)動(dòng)318 18.12 本章小結(jié)319 第19章 使用Kotlin編寫(xiě)Spring應(yīng)用程序320 19.1 創(chuàng)建一個(gè)Starter項(xiàng)目320 19.2 創(chuàng)建一個(gè)控制器322 19.3 創(chuàng)建一個(gè)實(shí)體類(lèi)324 19.4 創(chuàng)建一個(gè)存儲(chǔ)庫(kù)接口325 19.5 創(chuàng)建一個(gè)服務(wù)326 19.6 將服務(wù)與控制器集成327 19.7 繼續(xù)實(shí)踐329 19.8 本章小結(jié)330 第20章 使用Kotlin編寫(xiě)Android應(yīng)用程序331 20.1 創(chuàng)建一個(gè)項(xiàng)目331 20.2 定義域?qū)ο?33 20.3 創(chuàng)建布局335 20.4 實(shí)施活動(dòng)337 20.5 更新RecyclerView341 20.6 查看應(yīng)用程序的運(yùn)行情況343 20.7 本章小結(jié)344 附錄1 轉(zhuǎn)換為JavaScript346 附錄2 Kotlin/Native350 附錄3 Kotlin到WebAssembly353 參考文獻(xiàn)357
你還可能感興趣
我要評(píng)論
|