KOTLIN核心編程(水滴技術團隊出品.深入闡述KOTLIN
作 者: 水滴技術團隊 著
定 價: 89
出?版?社: 機械工業出版社
出版日期: 2019年04月01日
頁 數: 360
裝 幀: 平裝
ISBN: 9787111624318
●前言熱身篇 Kotlin基礎章 認識Kotlin21.1 Java的發展21.1.1 Java 8的探索31.1.2 Java未來的樣子31.2 Scala的百寶箱31.2.1 學術和工業的平衡41.2.2 復合但不復雜41.2.3 簡單卻不容易51.3 Kotlin—改良的Java51.3.1 Kotlin的實用主義61.3.2 更好的Java61.3.3 強大的生態81.4 本章小結8第2章 基礎語法102.1 不一樣的類型聲明102.1.1 增強的類型推導112.1.2 聲明函數返回值類型112.2 val和var的使用規則132.2.1 val的含義:引用不可變132.2.2 優先使用val來避免副作用142.2.3 var的適用場景152.3 高階函數和Lambda162.3.1 抽像和高階函數172.3.2 實例:函數作為參數的需求172.3.3 函數的類型192.3.4 方法和成員引用212.3.5 匿名函數222.3.6 Lambda是語法糖222.3.7 函數、Lambda和閉包252.3.8 “柯裡化”風格、擴展函數262.4 面向表達式編程292.4.1 表達式比語句更安全302.4.2 Unit類型:讓函數調用皆為表達式322.4.3 復合表達式:更好的表達力332.4.4 枚舉類和when表達式342.4.5 for循環和範圍表達式372.4.6 中綴表達式392.5 字符串的定義和操作412.5.1 定義原生字符串412.5.2 字符串模板422.5.3 字符串判等432.6 本章小結43下水篇 Kotlin核心第3章 面向對像463.1 類和構造方法463.1.1 Kotlin中的類及接口463.1.2 更簡潔地構造類的對像493.1.3 主從構造方法553.2 不同的訪問控制原則563.2.1 限制修飾符573.2.2 可見性修飾符613.3 解決多繼承問題643.3.1 騾子的多繼承困惑643.3.2 接口實現多繼承653.3.3 內部類解決多繼承問題的方案673.3.4 使用委托代替多繼承693.4 真正的數據類713.4.1 煩瑣的JavaBean 713.4.2 用data class創建數據類 733.4.3 copy、componentN與解構753.4.4 數據類的約定與使用783.5 從static到object793.5.1 什麼是伴生對像793.5.2 天生的單例:object813.5.3 object表達式823.6 本章小結84第4章 代數數據類型和模式匹配854.1 代數數據類型854.1.1 從代數到類型864.1.2 計數874.1.3 積類型874.1.4 和類型與密封類884.1.5 構造代數數據類型894.2 模式匹配904.2.1 何為模式914.2.2 常見的模式924.2.3 處理嵌套表達式934.2.4 通過Scala找點靈感954.2.5 用when力挽狂瀾974.3 增強 Kotlin 的模式匹配994.3.1 類型測試/類型轉換994.3.2 面向對像的分解1004.3.3 訪問者設計模式1024.3.4 總結1044.4 用代數數據類型來抽像業務1054.4.1 從一個實際需求入手1054.4.2 糟糕的設計1054.4.3 利用ADT1064.4.4 更高層次的抽像1084.5 本章總結110第5章 類型繫統1125.1 null引用:1的錯誤1125.1.1 null做了哪些惡1125.1.2 如何解決NPE問題1145.2 可空類型1155.2.1 Java 8中的Optional1155.2.2 Kotlin的可空類型1185.2.3 類型檢查1215.2.4 類型智能轉換1225.3 比Java更面向對像的設計1245.3.1 Any:非空類型的根類型1245.3.2 Any?:所有類型的根類型1275.3.3 Nothing與Nothing?1285.3.4 自動裝箱與拆箱1285.3.5 “新”的數組類型1295.4 泛型:讓類型更加安全1305.4.1 泛型:類型安全的利刃1305.4.2 如何在Kotlin中使用泛型1315.4.3 類型約束:設定類型上界1335.5 泛型的背後:類型擦除1355.5.1 Java為什麼無法聲明一個泛型數組1355.5.2 向後兼容的罪1365.5.3 類型擦除的矛盾1385.5.4 使用內聯函數獲取泛型1395.6 打破泛型不變1405.6.1 為什麼List不能賦值給List1405.6.2 一個支持協變的List1415.6.3 一個支持逆變的Comparator1435.6.4 協變和逆變1445.7 本章小結147第6章 Lambda和集合1486.1 Lambda簡化表達1486.1.1 調用Java的函數式接口1486.1.2 帶接收者的Lambda1496.1.3 with和apply1506.2 集合的高階函數API1516.2.1 以簡馭繁:map1516.2.2 對集合進行篩選:filter、count1526.2.3 別樣的求和方式:sumBy、sum、fold、reduce1546.2.4 根據學生性別進行分組:groupBy1566.2.5 扁平化—處理嵌套集合:flatMap、flatten1576.3 集合庫的設計1596.3.1 集合的繼承關繫1596.3.2 可變集合與隻讀集合1606.4 惰性集合1636.4.1 通過序列提高效率1636.4.2 序列的操作方式1646.4.3 序列可以是無限的1666.4.4 序列與Java 8 Stream對比1666.5 內聯函數1676.5.1 優化Lambda開銷1686.5.2 內聯函數具體語法1696.5.3 noinline:避免參數被內聯1716.5.4 非局部返回1726.5.5 crossinline1746.5.6 具體化參數類型1746.6 本章小結175第7章 多態和擴展1767.1 多態的不同方式1767.1.1 子類型多態1767.1.2 參數多態1777.1.3 對第三方類進行擴展1787.1.4 特設多態與運算符重載1787.2 擴展:為別的類添加方法、屬性1797.2.1 擴展與開放封閉原則1797.2.2 使用擴展函數、屬性1807.2.3 擴展的特殊情況1837.2.4 標準庫中的擴展函數:run、let、also、takeIf1867.3 Android中的擴展應用1887.3.1 優化Snackbar1887.3.2 用擴展函數封裝Utils1897.3.3 解決煩人的findViewById1907.4 擴展不是萬能的1937.4.1 調度方式對擴展函數的影響1937.4.2 被濫用的擴展函數1967.5 本章小結197第8章 &nb編程1988.1 程序和數據1998.1.1 編程1998.1.2 編程技術2018.2 Kotlin的反射2028.2.1 Kotlin和Java反射2028.2.2 Kotlin的KClass2058.2.3 Kotlin的KCallable2068.2.4 獲取參數信息2088.3 Kotlin的注解2108.3.1 無處不在的注解2118.3.2 精確控制注解的位置2128.3.3 獲取注解信息2138.4 本章小結216潛入篇 Kotlin探索第9章 設計模式2189.1 創建型模式2189.1.1 伴生對像增強工廠模式2199.1.2 內聯函數簡化抽像工廠2229.1.3 用具名可選參數而不是構建者模式2249.2 行為型模式2289.2.1 Kotlin中的觀察者模式2289.2.2 高階函數簡化策略模式、模板方法模式2319.2.3 運算符重載和迭代器模式2359.2.4 用偏函數實現責任鏈模式2379.2.5 ADT實現狀態模式2419.3 結構型模式2449.3.1 裝飾者模式:用類委托減少樣板代碼2459.3.2 通過擴展代替裝飾者2469.4 本章小結2480章 函數式編程24910.1 函數式編程的特征24910.1.1 函數式語言之爭25010.1.2 純函數與引用透明性25110.1.3 代換模型與惰性求值25310.2 實現Typeclass25410.2.1 高階類型:用類型構造新類型25510.2.2 高階類型和Typeclass25610.2.3 用擴展方法實現Typeclass25710.2.4 Typeclass設計常見功能25810.3 函數式通用結構設計26210.3.1 Monoid26210.3.2 Monad26410.3.3 Monad組合副作用26910.4 類型代替異常處理錯誤27110.4.1 Option與OptionT27210.4.2 Either與EitherT27610.5 本章小結2791章 異步和並發28111.1 同步到異步28111.1.1 同步與阻塞的代價28111.1.2 利用異步非阻塞來提高效率28411.1.3 回調地獄28411.2 Kotlin的Coroutine28611.2.1 多線程一定優於單線程嗎28711.2.2 協程:一個更輕量級的“線程”28711.2.3 合理地使用協程28811.2.4 用同步方式寫異步代碼29011.3 共享資源控制29311.3.1 鎖模式29311.3.2 Actor:有狀態的並行29611.4 CQRS架構30211.4.1 Event Sourcing事件溯源—記錄對像操作軌跡30211.4.2 Kotlin with Akka Persistence-Actor30411.5 本章小結310遨遊篇 Kotlin實戰2章 基於Kotlin的Android架構31412.1 架構方式的演變31412.1.1 經典的 MVC 問題31512.1.2 MVP31612.1.3 MVVM32012.2 單向數據流模型32712.2.1 Redux32712.2.2 單向數據流的優勢32912.3 ReKotlin33112.3.1 初見 ReKotlin33112.3.2 創建基於ReKotlin的項目33212.4 解耦視圖導航34112.4.1 傳統導航的問題34112.4.2 rekotlin-router34212.5 本章小結3433章 開發響應式Web應用34513.1 響應式編程的關鍵:非阻塞異步編程模型34513.1.1 使用CompletableFuture實現異步非阻塞34613.1.2 使用RxKotlin進行響應式編程34713.1.3 響應式Web編程框架34813.2 Spring 5:響應式Web框架34913.2.1 支持響應式編程34913.2.2 適配Kotlin35013.2.3 函數式路由35113.2.4 異步數據庫驅動35313.3 Spring 5響應式編程實戰35413.4 本章小結360
內容簡介
本書不是一本簡單介紹Kotlin語法應用的圖書,而是一部專注於幫助讀者深入理解Kotlin的設計理念,指導讀者實現Kotlin高層次開發的實戰型著作。書中深入介紹了Kotlin的核心語言特性、設計模式、函數式編程、異步開發等內容,並以Android和Web兩個平臺為背景,演示了Kotlin的實戰應用。全書共13章,分為4個部分:熱身篇—Kotlin基礎(~2章),簡單介紹了Kotlin設計哲學、生態及基礎語法,其中包括Kotlin與Scala、Java之間的關聯與對比,以及Kotlin的類型聲明的特殊性、val和var的使用、高階函數的使用、面向表達式編程的使用、字符串的定義與操作等內容;下水篇—Kotlin核心(第3~8章),深入介紹了面向對像、代數數據類型、模式匹配、類型繫統、Lambda、集合、多態、編程等Kotlin開發核心知識,這是本書的重點,其中涉及很多開發者特別關心的......
章認識Kotlin在Java之後,JVM平臺上出現了其他的編程語言,Scala和Kotlin可以算是其中的佼佼者。Scala已成為大數據領域的明星,而Kotlin在2017年Google I/O大會之後,也成為安卓平臺上潛力巨大的官方支持語言。它們都因被冠以“更好的Java”而為人稱道,然而它們采用的卻是兩種不同的設計理念。本章我們通過對比Java、Scala、Kotlin這3種編程語言各自的發展路線,來認識Kotlin的設計哲學。1.1 Java的發展不得不說,Java是當今很成功的編程語言之一。自1996年問世,Java就始終占據著編程語言生態中很大的份額。它的優勢主要體現在:多平臺與強大的社區支持。無論是用於Web開發還是用於移動設備,Java都是主流的編程語言之一。尊重標準。它有著嚴格的語言規範及向後兼容性,因此......
為什麼要寫這本書2017年5月,Hadi Hariri(JetBrains的首席布道師)在座無虛席的Google I/O大會上介紹Kotlin時,先開了一個玩笑:“大概4年半之前,我們曾在一個容納900人的會場做過同樣的事情,但結果隻來了7個人。”他說的是事實,自從Google宣布Kotlin成為Android官方編程語言之後,Kotlin這門默默無聞的語言一下子成為技術圈中的“明星”。隨後,關於Kotlin的開源項目和學習資料也如雨後春筍般出現。同一時刻,在我們位於杭州的辦公室裡,水滴的同事也在進行著一個用Kotlin研發的Android項目。作為一個采用Scala全棧開發的“非主流”技術團隊,我們對Kotlin有天然的好感。一方面,它在某些地方非常像Scala。相比Java,它們都擁有更簡潔的語法,以及更多的函數式特性(如高階函數、更強的類型推導、不同程度上的模式匹配等)。另一方面,K......
"