定 價(jià):119 元
叢書名:計(jì)算機(jī)科學(xué)先進(jìn)技術(shù)譯叢
- 作者:[法] 皮埃爾-伊夫斯·索蒙特(Pierre-Yves Saumont)
- 出版時(shí)間:2020/5/1
- ISBN:9787111650409
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP312.8
- 頁(yè)碼:400
- 紙張:膠版紙
- 版次:1
- 開本:16K
作為Java開發(fā)人員,維護(hù)糟糕的遺留代碼、解釋晦澀的注釋、反復(fù)編寫相同的樣板文件可能會(huì)讓編程失去樂(lè)趣!禟otlin編程之美》講述用Kotlin編寫易于理解、易于維護(hù)、安全的程序的方法和技巧。在本書中,經(jīng)驗(yàn)豐富的工程師皮埃爾-伊夫斯?索蒙特將以全新的、以函數(shù)式編程的視角來(lái)處理常見(jiàn)的編程挑戰(zhàn),并用示例深入講解如何正確處理錯(cuò)誤和數(shù)據(jù)、如何管理狀態(tài)以及如何利用惰性。
《Kotlin編程之美》的內(nèi)容包括編程功能、處理可選數(shù)據(jù)、安全處理錯(cuò)誤和異常以及處理和共享狀態(tài)突變等。《Kotlin編程之美》的讀者對(duì)象為中級(jí)Java或Kotlin開發(fā)人員、高等院校計(jì)算機(jī)相關(guān)專業(yè)學(xué)生以及對(duì)安全編程感興趣的工程技術(shù)人員等。
目 錄
封 面
譯者序
致 謝
前 言
關(guān)于本書
關(guān)于讀者
關(guān)于封面插圖
第1章 讓程序更安全
1.1 編程陷阱
1.1.1 安全的處理作用
1.1.2 用引用透明性使程序更安全
1.2 安全編程的好處
1.2.1 使用替換模型對(duì)程序進(jìn)行推理
1.2.2 應(yīng)用安全原則的簡(jiǎn)單示例
1.2.3 將抽象推向極限
1.3 本章小結(jié)
第2章 Kotlin中的函數(shù)式編程:概述
2.1 Kotlin中的字段和變量
2.1.1 省略類型以簡(jiǎn)化
2.1.2 使用可變字段
2.1.3 理解延遲初始化
2.2 Kotlin中的類和接口
2.2.1 使代碼更加簡(jiǎn)潔
2.2.2 實(shí)現(xiàn)接口或擴(kuò)展類
2.2.3 實(shí)例化一個(gè)類
2.2.4 重載屬性構(gòu)造函數(shù)
2.2.5 創(chuàng)建equals和hashCode方法
2.2.6 解構(gòu)數(shù)據(jù)對(duì)象
2.2.7 在Kotlin中實(shí)現(xiàn)靜態(tài)成員
2.2.8 使用單例模式
2.2.9 防止工具類實(shí)例化
2.3 Kotlin沒(méi)有原語(yǔ)
2.4 Kotlin的兩種集合類型
2.5 Kotlin的包
2.6 Kotlin的可見(jiàn)性
2.7 Kotlin中的函數(shù)
2.7.1 函數(shù)聲明
2.7.2 使用局部函數(shù)
2.7.3 覆蓋函數(shù)
2.7.4 使用擴(kuò)展函數(shù)
2.7.5 使用lamdba表達(dá)式
2.8 Kotlin中的null
2.8.1 處理可空類型
2.8.2 Elvis和默認(rèn)值
2.9 程序流程和控制結(jié)構(gòu)
2.9.1 使用條件選擇器
2.9.2 使用多條件選擇器
2.9.3 使用循環(huán)
2.10 Kotlin的未檢查異常
2.11 自動(dòng)關(guān)閉資源
2.12 Kotlin的智能轉(zhuǎn)換
2.13 相等性VS一致性
2.14 字符串插值
2.15 多行字符串
2.16 型變:參數(shù)化類型和子類型
2.16.1 為什么型變是一個(gè)潛在的問(wèn)題
2.16.2 何時(shí)使用協(xié)變以及何時(shí)使用逆變
2.16.3 聲明端型變與使用端型變
2.17 本章小結(jié)
第3章 用函數(shù)編程
3.1 函數(shù)是什么?
3.1.1 理解兩個(gè)函數(shù)集之間的關(guān)系
3.1.2 Kotlin中反函數(shù)概述
3.1.3 處理偏函數(shù)
3.1.4 理解函數(shù)復(fù)合
3.1.5 使用多參數(shù)函數(shù)
3.1.6 柯里化函數(shù)
3.1.7 使用偏應(yīng)用函數(shù)
3.1.8 沒(méi)有作用的函數(shù)
3.2 Kotlin中的函數(shù)
3.2.1 將函數(shù)理解為數(shù)據(jù)
3.2.2 將數(shù)據(jù)理解為函數(shù)
3.2.3 使用對(duì)象構(gòu)造函數(shù)作為函數(shù)
3.2.4 使用Kotlin的fun函數(shù)
3.2.5 使用對(duì)象表示法和函數(shù)表示法
3.2.6 使用值函數(shù)
3.2.7 使用函數(shù)引用
3.2.8 復(fù)合函數(shù)
3.2.9 重用函數(shù)
3.3 高級(jí)函數(shù)特征
3.3.1 多參數(shù)函數(shù)如何?
3.3.2 應(yīng)用柯里化函數(shù)
3.3.3 實(shí)現(xiàn)高階函數(shù)
3.3.4 創(chuàng)建多態(tài)高階函數(shù)
3.3.5 使用匿名函數(shù)
3.3.6 定義局部函數(shù)
3.3.7 實(shí)現(xiàn)閉包
3.3.8 應(yīng)用偏函數(shù)和自動(dòng)柯里化
3.3.9 切換偏應(yīng)用函數(shù)的參數(shù)
3.3.10 聲明單位函數(shù)
3.3.11 使用正確的類型
3.4 本章小結(jié)
第4章 遞歸、尾遞歸和記憶化
4.1 共遞歸與遞歸
4.1.1 實(shí)現(xiàn)共遞歸
4.1.2 實(shí)現(xiàn)遞歸
4.1.3 區(qū)分遞歸函數(shù)和共遞歸函數(shù)
4.1.4 選擇遞歸或尾遞歸
4.2 尾調(diào)用消除
4.2.1 使用尾調(diào)用消除
4.2.2 從循環(huán)切換到共遞歸
4.2.3 使用遞歸值函數(shù)
4.3 遞歸函數(shù)和列表
4.3.1 使用雙遞歸函數(shù)
4.3.2 對(duì)列表抽象遞歸
4.3.3 反轉(zhuǎn)列表
4.3.4 構(gòu)建共遞歸列表
4.3.5 嚴(yán)格的后果
4.4 記憶化
4.4.1 在基于循環(huán)的編程中使用記憶化
4.4.2 在遞歸函數(shù)中使用記憶化
4.4.3 使用隱式記憶化
4.4.4 使用自動(dòng)記憶化
4.4.5 實(shí)現(xiàn)多參數(shù)函數(shù)的記憶化
4.5 記憶函數(shù)純嗎?
4.6 本章小結(jié)
第5章 用列表處理數(shù)據(jù)
5.1 如何對(duì)數(shù)據(jù)集合進(jìn)行分類
5.2 不同類型的列表
5.3 相對(duì)期望列表性能
5.3.1 用時(shí)間來(lái)交換內(nèi)存空間和復(fù)雜性
5.3.2 避免就地突變
5.4 KOTLIN有哪些可用列表?
5.4.1 使用持久數(shù)據(jù)結(jié)構(gòu)
5.4.2 實(shí)現(xiàn)不可變的、持久的單鏈表
5.5 列表操作中的數(shù)據(jù)共享
5.6 更多列表操作
5.6.1 標(biāo)注的益處
5.6.2 連接列表
5.6.3 從列表末尾刪除
5.6.4 使用遞歸對(duì)具有高階函數(shù)(HOFs)的列表進(jìn)行折疊
5.6.5 使用型變
5.6.6 創(chuàng)建foldRight的一個(gè)棧安全遞歸版本
5.6.7 映射和過(guò)濾列表
5.7 本章小結(jié)
第6章 處理可選數(shù)據(jù)
6.1 空指針問(wèn)題
6.2 Kotlin如何處理空引用
6.3 空引用的替代方法
6.4 使用OPTION類型
6.4.1 從一個(gè)Option中獲取值
6.4.2 將函數(shù)應(yīng)用于可選值
6.4.3 處理Option組合
6.4.4 Option用例
6.4.5 其他組合選項(xiàng)的方法
6.4.6 用Option組合List
6.4.7 何時(shí)使用Option
6.5 本章小結(jié)
第7章 處理錯(cuò)誤和異常
7.1 數(shù)據(jù)缺失的問(wèn)題
7.2 Either類型
7.3 Result類型
7.4 Result模式
7.5 高級(jí)Result處理
7.6 映射Failture
7.7 添加工廠函數(shù)
7.8 應(yīng)用作用
7.9 高級(jí)結(jié)果組合
7.10 本章小結(jié)
第8章 高級(jí)列表處理
8.1 長(zhǎng)度問(wèn)題
8.2 性能問(wèn)題
8.3 記憶化的好處
8.3.1 處理記憶化的缺點(diǎn)
8.3.2 評(píng)估性能改進(jìn)
8.4 List和Result組成
8.4.1 處理List返回Result
8.4.2 從List轉(zhuǎn)換為Result
8.5 常見(jiàn)列表抽象
8.5.1 壓縮和解壓縮列表
8.5.2 通過(guò)索引訪問(wèn)元素
8.5.3 列表分裂
8.5.4 搜索子列表
8.5.5 處理列表的其它函數(shù)
8.6 列表的自動(dòng)并行處理
8.6.1 并不是所有的計(jì)算都可以并行化
8.6.2 將列表分解為子列表
8.6.3 并行處理子列表
8.7 本章小結(jié)
第9章 與惰性配合
9.1 嚴(yán)格VS惰性
9.2 Kotlin和嚴(yán)格
9.3 Kotlin和惰性
9.4 懶惰的實(shí)現(xiàn)
9.4.1 組合惰性值
9.4.2 提升函數(shù)
9.4.3 映射和flatMapping惰性
9.4.4 用列表組成惰性
9.4.5 處理異常
9.5 深層次的惰性構(gòu)成
9.5.1 惰性應(yīng)用作用
9.5.2 不能沒(méi)有惰性
9.5.3 創(chuàng)建一個(gè)惰性列表數(shù)據(jù)結(jié)構(gòu)
9.6 處理流
9.6.1 折疊流
9.6.2 跟蹤計(jì)算和函數(shù)應(yīng)用
9.6.3 將流應(yīng)用于具體問(wèn)題
9.7 本章小結(jié)
第10章 使用樹處理更多的數(shù)據(jù)
10.1 二叉樹
10.2 了解平衡和不平衡的樹
10.3 樹的大小、高度和深度
10.4 空樹和遞歸定義
10.5 多葉樹
10.6 有序二叉樹或二叉搜索樹
10.7 插入順序和樹的結(jié)構(gòu)
10.8 遞歸和非遞歸樹遍歷順序
10.8.1 遞歸遍歷樹
10.8.2 非遞歸遍歷樹
10.9 實(shí)現(xiàn)二叉搜索樹
10.9.1 理解型變和樹
10.9.2 Tree類中的抽象函數(shù)
10.9.3 重載操作符
10.9.4 樹中遞歸
10.9.5 從樹中移除元素
10.9.6 合并任意樹
10.10 關(guān)于折疊樹
10.10.1 雙函數(shù)折疊
10.10.2 單函數(shù)折疊
10.10.3 如何選擇折疊實(shí)現(xiàn)
10.11 映射樹
10.12 平衡樹
10.12.1 旋轉(zhuǎn)樹
10.12.2 使用Day-Stout-Warren算法
10.12.3 自動(dòng)平衡樹
第11章 用高級(jí)樹解決問(wèn)題
11.1 自平衡樹的性能更好,棧更安全
11.1.1 了解基本的紅黑樹結(jié)構(gòu)
11.1.2 向紅黑樹中添加元素
11.1.3 從紅黑樹中移除元素
11.2 一個(gè)紅黑樹的用例:Map
11.2.1 實(shí)現(xiàn)Map
11.2.2 擴(kuò)展Map
11.2.3 使用具有不可比較鍵的Map
11.3 實(shí)現(xiàn)功能優(yōu)先隊(duì)列
11.3.1 查看優(yōu)先隊(duì)列訪問(wèn)協(xié)議
11.3.2 探索優(yōu)先級(jí)隊(duì)列用例
11.3.3 查看實(shí)現(xiàn)需求
11.3.4 左傾堆數(shù)據(jù)結(jié)構(gòu)
11.3.5 實(shí)現(xiàn)左傾堆
11.3.6 實(shí)現(xiàn)類似隊(duì)列的接口
11.4 元素和有序列表
11.5 不可比較元素的優(yōu)先隊(duì)列
11.6 本章小結(jié)
第12章 函數(shù)式輸入/輸出
12.1 作用在上下文中是什么意思
12.1.1 處理作用
12.1.2 實(shí)現(xiàn)作用
12.2 讀取數(shù)據(jù)
12.2.1 從控制臺(tái)讀取數(shù)據(jù)
12.2.2 從文件中讀取數(shù)據(jù)
12.3 輸入測(cè)試
12.4 全函數(shù)式輸入/輸出
12.4.1 使輸入/輸出全函數(shù)式
12.4.2 實(shí)現(xiàn)純函數(shù)式的輸入/輸出
12.4.3 結(jié)合輸入/輸出
12.4.4 用IO處理輸入
12.4.5 擴(kuò)展IO類型
12.4.6 使IO類型堆棧安全
12.5 本章小結(jié)
第13章 與參與者共享可變狀態(tài)
13.1 角色模型
13.1.1 理解異步消息傳遞
13.1.2 并行化處理
13.1.3 處理角色狀態(tài)突變
13.2 角色框架實(shí)現(xiàn)
13.2.1 理解局限性
13.2.2 設(shè)計(jì)角色框架接口
13.3 AbstractActor的實(shí)現(xiàn)
13.4 讓角色投入工作
13.4.1 實(shí)現(xiàn)乒乓球例子
13.4.2 并行運(yùn)行計(jì)算
13.4.3 重排結(jié)果
13.4.4 優(yōu)化性能
13.5 本章小結(jié)
第14章 解決常見(jiàn)功能性問(wèn)題
14.1 斷言和數(shù)據(jù)驗(yàn)證
14.2 函數(shù)和作用的重試
14.3 從文件中讀入屬性
14.3.1 加載屬性文件
14.3.2 以字符串形式讀取屬性
14.3.3 生成更好的錯(cuò)誤消息
14.3.4 將屬性作為列表讀取
14.3.5 讀取枚舉值
14.3.6 讀取任意類型的屬性
14.4 轉(zhuǎn)換命令式風(fēng)格的程序:XML閱讀器
14.4.1 第1步:命令式風(fēng)格的解決方案
14.4.2 第2步:將命令式風(fēng)格的代碼轉(zhuǎn)換為函數(shù)式
14.4.3 第3步:將程序轉(zhuǎn)換得更函數(shù)式
14.4.4 第4步:修復(fù)參數(shù)類型問(wèn)題
14.4.5 第5步:使元素處理函數(shù)成為參數(shù)
14.4.6 第6步:對(duì)元素名稱進(jìn)行錯(cuò)誤處理
14.4.7 第7步:對(duì)先前命令式代碼的額外改進(jìn)
14.5 本章小結(jié)
附錄 A-將Kotlin與Java結(jié)合
A.1 創(chuàng)建和管理混合項(xiàng)目402
A.1.1 利用Gradle創(chuàng)建一個(gè)簡(jiǎn)單的項(xiàng)目
A.1.2 將Gradle項(xiàng)目導(dǎo)入IntelliJ
A.1.3 為項(xiàng)目增加依賴
A.1.4 創(chuàng)建多模塊項(xiàng)目
A.1.5 為多模塊項(xiàng)目增加依賴
A.2 Java庫(kù)方法和Kotlin代碼
A.2.1 使用Java基本類型
A.2.2 使用Java數(shù)值對(duì)象類型
A.2.3 對(duì)null值快速失敗
A.2.4 使用Kotlin和Java的字符串類型
A.2.5 實(shí)現(xiàn)其他類型的轉(zhuǎn)換
A.2.6 使用Java可變參數(shù)
A.2.7 在Java中指定可空性
A.2.8 調(diào)用getter方法和setter方法
A.2.9 使用保留字獲取Java屬性
A.2.10 調(diào)用已檢查異常
A.3 SAM接口
A.4 Kotlin函數(shù)和Java代碼
A.4.1 轉(zhuǎn)換Kotlin屬性
A.4.2 使用Kotlin公共字段
A.4.3 靜態(tài)字段
A.4.4 將Kotlin函數(shù)作為Java方法調(diào)用
A.4.5 將Kotlin的類型轉(zhuǎn)換為Java類型
A.4.6 函數(shù)類型
A.5 混合Kotlin/Java項(xiàng)目的特定問(wèn)題
附錄B-Kotlin中基于屬性的測(cè)試
B.1 為何使用基于屬性的測(cè)試
B.1.1 編寫接口
B.1.2 編寫測(cè)試程序
B.2 什么是基于屬性的測(cè)試
B.3 抽象及基于屬性的測(cè)試
B.4 基于屬性的單元測(cè)試的依賴
B.5 編寫基于屬性的測(cè)試程序
B.5.1 創(chuàng)建自定義生成器
B.5.2 使用自定義生成器
B.5.3 通過(guò)更進(jìn)一步抽象來(lái)簡(jiǎn)化代碼