描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111650935
Kotlin语言为Android移动应用开发带来了极其先进的编程技术和结构。
本书可帮助开发者快速理解Kotlin的原理和技术,并将其应用于生产环境中的移动应用程序开发,或者与现有的Java代码整合。
如果你愿意,也可以将现有代码迁移到Kotlin技术栈。
如果你曾用任何一种语言编写过代码,那么作者精心撰写的概述和示例就能够帮助你快速掌握Kotlin语言,包括其语言构造、先进的函数式和面向对象能力。
在掌握这些语言基础之后,作者将指引读者完成两个完整的应用程序开发,并引入*实践和新兴模式,从而帮助开发者写出更健壮、更简洁且更可读的高性能代码。
【本书内容】
-
理解Kotlin的目标、原则、优势、设计和构造
● 充分利用Kotlin环境中的函数式编程
● 利用Kotlin的面向对象特性编写更简洁、更可复用的代码
● 与现有Java代码互操作,并制定Kotlin迁移计划
● 使用协程来有效地处理并发
● 通过第三方API捕获数据,将其映射到内部数据表现层,再呈现给用户
● 掌握Kotlin Android应用程序架构的*实践
● 通过在Kotlin中创建简单的领域特定语言来提高工作效率与可读性
近年来,Kotlin已逐渐成为Android应用程序开发人员的*语言。
本书通过大量的代码对Kotlin进行了深入浅出的讲解,并通过两个Android应用程序开发来指导读者进行实践,以帮助读者使用Kotlin编写出更健壮、更易维护的Android应用程序。
全书分两部分,共10章。
*部分(第1~6章)从细节入手讲解Kotlin的语言特性。第1章概述Kotlin,第2章介绍Kotlin的基本语言结构(如控制流、函数和异常),第3章展示Kotlin中如何使用函数式编程以及函数式编程的优点,第4章讲解Kotlin中如何处理面向对象,第5章讨论与Java的互操作性,第6章涵盖以协程为主要内容的并发性。
第二部分(第7~10章)通过完成两个Android应用来将*部分学到的知识加以实践。第7章和第8章分别介绍使用Kotlin开发一个待办事项应用Kudoo App和一个为使用者提供营养数据的应用Nutrilicious,第9章涵盖综合使用Kotlin的语言特性来创建简单的领域特定语言,第10章为Java迁移到Kotlin提供指导。
本书适合想要学习Kotlin并利用它来开发Android应用程序的所有读者阅读。
★第一部分 学习Kotlin
- 第1章 Kotlin简介2
1.1 Kotlin是什么2
1.2 Kotlin的目标和语言特性3
1.3 为什么在Android系统开发中使用Kotlin4
1.3.1 Android中的Java4
1.3.2 Android中的Kotlin5
1.4 Kotlin与Java 85
1.5 支持的工具与社区6
1.6 商业角度6
1.7 谁在使用Kotlin7
1.8 本章小结8
- 第2章 走进Kotlin9
2.1 Kotlin REPL交互式编程命令行9
2.2 变量和数据类型10
2.2.1 变量声明10
2.2.2 基本数据类型11
2.2.3 类型推导12
2.3 条件语句13
2.3.1 将if和when作为语句13
2.3.2 条件表达式15
2.4 循环和范围17
2.4.1 while循环17
2.4.2 for循环17
2.5 函数19
2.5.1 函数签名19
2.5.2 单行表达式函数的简写方式20
2.5.3 main函数20
2.5.4 参数默认值和指定参数名称21
2.5.5 扩展函数22
2.5.6 中缀函数24
2.5.7 运算符函数25
2.6 空安全26
2.6.1 可空类型26
2.6.2 可空类型的使用27
2.7 相等性检查29
2.8 异常处理30
2.8.1 异常处理的原则30
2.8.2 Kotlin的异常处理31
2.8.3 Checked异常和Unchecked异常32
2.9 本章小结33
- 第3章 Kotlin中的函数式编程34
3.1 函数式编程的目的34
3.2 函数36
3.3 Lambda表达式37
3.4 高阶函数38
3.5 集合的使用41
3.5.1 集合API在Kotlin与Java中的区别42
3.5.2 在Kotlin中实例化集合42
3.5.3 集合的访问和编辑43
3.5.4 过滤集合44
3.5.5 映射集合44
3.5.6 集合分组45
3.5.7 集合关联46
3.5.8 计算最小值、最大值,以及和46
3.5.9 集合排序46
3.5.10 折叠集合47
3.5.11 链式函数调用49
3.6 作用域函数49
3.6.1 let函数的使用49
3.6.2 apply函数的使用50
3.6.3 with函数的使用51
3.6.4 run函数的使用52
3.6.5 also函数的使用54
3.6.6 use函数的使用54
3.6.7 组合高阶函数55
3.6.8 带接收者的Lambda56
3.7 惰性序列57
3.7.1 惰性计算57
3.7.2 使用惰性序列58
3.7.3 惰性序列的性能60
3.8 本章小结62
- 第4章 Kotlin中的面向对象63
4.1 类和对象的实例化63
4.2 属性64
4.2.1 属性和字段65
4.2.2 getter和setter66
4.2.3 延迟初始化属性67
4.2.4 委托属性68
4.2.5 预定义委托69
4.2.6 委托给map71
4.2.7 使用委托的实现72
4.3 方法73
4.3.1 扩展方法74
4.3.2 嵌套类和内部类75
4.4 主构造函数和次构造函数76
4.4.1 主构造函数76
4.4.2 次构造函数77
4.5 继承和重写规则78
4.5.1 接口78
4.5.2 抽象类80
4.5.3 开放类81
4.5.4 重写规则81
4.6 类型检查和转换82
4.6.1 类型检查82
4.6.2 类型转换82
4.6.3 智能转换83
4.7 可见性84
4.7.1 类或接口中的声明84
4.7.2 顶级声明86
4.8 数据类86
4.8.1 使用数据类87
4.8.2 数据类的继承88
4.9 枚举89
4.10 密封类91
4.11 对象和伴生93
4.11.1 把对象声明为单例95
4.11.2 伴生对象95
4.12 泛型97
4.12.1 泛型类和泛型函数97
4.12.2 协变和逆变101
4.12.3 声明处型变104
4.12.4 使用处型变107
4.12.5 受限的类型参数109
4.12.6 星形投影110
4.13 本章小结112
- 第5章 与Java的互操作性113
5.1 在Kotlin中使用Java代码113
5.1.1 调用getter和setter114
5.1.2 处理可空属性115
5.1.3 转义冲突的Java标识符119
5.1.4 调用可变参数方法120
5.1.5 使用操作符120
5.1.6 使用SAM类型121
5.1.7 关于互操作性更进一步的考虑121
5.2 在Java中使用Kotlin代码122
5.2.1 访问属性122
5.2.2 将属性作为字段公开124
5.2.3 使用文件级声明125
5.2.4 调用扩展函数126
5.2.5 访问静态成员127
5.2.6 生成重载方法129
5.2.7 使用密封类和数据类130
5.2.8 可见性131
5.2.9 获取KClass132
5.2.10 处理签名冲突132
5.2.11 使用内联函数133
5.2.12 异常处理134
5.2.13 使用可变类型135
5.2.14 Nothing类型136
5.3 互操作的最佳实践137
5.3.1 写出对Kotlin友好的Java代码137
5.3.2 写出对Java友好的Kotlin代码137
5.4 本章小结138
- 第6章 Kotlin中的并发140
6.1 并发140
6.1.1 普遍难题142
6.1.2 最先进的解决方案143
6.2 Kotlin中的协程146
6.2.1 引入协程146
6.2.2 基本概念147
6.2.3 挂起函数147
6.2.4 协程构建器150
6.2.5 生成器169
6.2.6 actors和channels171
6.2.7 并发样式178
6.2.8 协程实践178
6.2.9 内部实现183
6.3 本章小结185
★第二部分 使用Kotlin进行Android开发
- 第7章 使用Kotlin进行Android应用程序开发:Kudoo App188
7.1 在Android上配置Kotlin188
7.1.1 在Android Studio上使用Kotlin188
7.1.2 自动生成Gradle配置188
7.1.3 修改Gradle配置190
7.1.4 使用注解处理器191
7.1.5 把Java代码转换成Kotlin192
7.2 编写待办事项列表应用Kudoo192
7.2.1 创建项目193
7.2.2 添加RecyclerView195
7.2.3 添加Room数据库203
7.2.4 使用ViewModel208
7.2.5 集成LiveData212
7.2.6 添加新的待办事项214
7.2.7 启用检查待办事项218
7.3 本章小结219
- 第8章 使用Kotlin进行Android应用程序开发:Nutrilicious221
8.1 新建并配置项目222
8.2 为主页面添加RecyclerView223
8.2.1 为MainActivity布局223
8.2.2 为RecyclerView的项目布局224
8.2.3 实现Food模型226
8.2.4 实现RecyclerView的适配器226
8.2.5 在MainActivity中添加RecyclerView228
8.3 调用Nutrition的API从USDA中拉取数据230
8.3.1 使用Retrofit230
8.3.2 执行API请求235
8.4 映射JSON数据和领域类236
8.4.1 将JSON数据映射到数据传输对象237
8.4.2 将数据传输对象映射为model类239
8.5 在搜索逻辑中使用ViewModel241
8.6 增加搜索食品功能243
8.7 介绍Fragment I:实现搜索Fragment246
8.8 介绍Fragment II:实现收藏Fragment254
8.9 在Room数据库中存储用户收藏食品数据258
8.10 从USDA食品报告API中拉取营养详情数据265
8.11 集成详情页270
8.12 在数据库中存储食品详情277
8.13 为可操作的数据添加RDI282
8.14 优化用户体验286
8.14.1 在搜索页面增加结果为空时的说明286
8.14.2 在详情页增加进度说明287
8.15 本章小结288
- 第9章 Kotlin DSL289
9.1 DSL简介289
9.1.1 什么是DSL289
9.1.2 优点和缺点290
9.2 在Kotlin中创建DSL292
9.2.1 使用DSL来构建复杂对象292
9.2.2 通过构建器来保持不变性294
9.2.3 深入嵌套296
9.2.4 @DslMarker注解简介298
9.2.5 语言特性299
9.3 DSL在Android布局中的应用—使用Anko301
9.3.1 在代码中创建布局301
9.3.2 Anko依赖302
9.3.3 使用Anko创建布局303
9.3.4 添加布局参数303
9.3.5 将Kudoo中的AddTodoActivity的布局迁移到Anko布局304
9.3.6 增加自定义view306
9.3.7 比较Anko布局和XML布局307
9.4 DSL在Gradle构建脚本中的应用308
9.4.1 将项目Nutrilicious迁移到Gradle Kotlin DSL308
9.4.2 在Gradle中使用buildSrc313
9.4.3 优点和缺点314
9.5 本章小结315
- 第10章 迁移到Kotlin316
10.1 软件中的移植316
10.2 引领改变317
10.2.1 获得认可318
10.2.2 知识分享319
10.3 部分或整体迁移320
10.3.1 部分迁移320
10.3.2 整体迁移321
10.4 从何处开始322
10.4.1 测试代码322
10.4.2 生产代码323
10.4.3 宠物程序323
10.4.4 制定计划324
10.5 工具支持325
10.5.1 Java-to-Kotlin转换器325
10.5.2 调整自动转换的代码326
10.6 本章小结327
附录 更多资源329
术语表332
【读者对象】
本书适合所有具有一年以上编程经验的读者,并且试图为读者描绘出这门编程语言的基本结构。阅读本书之前,你并不需要具备任何Kotlin或Java的经验。如果你已经具备一些Android的基础知识,这将会对阅读和完成本书的练习部分非常有用,但这些知识并不是必需的。
同样,本书假设你已经了解了一些基本的软件开发专业术语。如果你在阅读本书内容时遇到不熟悉的专业术语,可以查阅书后的术语表。
简而言之,本书适合以下任何一种类型的读者。
- 具有一年以上编程经验。
- Java或者Android开发人员。
- 想使用Kotlin开发Android应用的程序员。
- 在大学学习过编程导论课程的人员。
然而,本书面向的读者并不仅限于以上列出的类型。最重要的是你非常渴望学习Kotlin,并且希望通过使用这门编程语言开发Android应用来加以实践。
【本书结构】
本书一开始将从细节入手教会你Kotlin的所有基本语言特性,接着介绍在Android环境下使用Kotlin。虽然本书会全面介绍Kotlin,但并不意味着这是一本语言参考书,相反,本书是一本侧重于读者亲自动手练习的实战书籍。
★第一部分介绍Kotlin编程语言。
第1章对Kotlin进行概述并介绍为什么要学习这门语言。
第2章介绍基本的语言结构,例如,控制流、函数和异常。同时着重介绍了Kotlin的底层原理以及这些原理如何反映在该语言的设计上。
第3章展示Kotlin如何引入函数式编程概念,如何使用函数式编程,以及函数式编程的优点。
第4章介绍在Kotlin中如何处理面向对象,以及Kotlin提供的能写出可复用且简洁代码的有趣特性。并且再次强调了所选择的语言设计策略。
第5章讨论常见问题、解决办法以及与Java互操作方面的最佳实践。
第6章涵盖以协程为主要内容的并发性,以及Kotlin如何对异步及并发编程进行处理。
★第二部分通过完成两个Android应用实践第一部分学到的知识。
第7章将使用Kotlin并遵循最佳实践来完成一个待办事项的应用。例如,使用Android的架构组件(Architecture Component)、回收视图(RecyclerView)以及协程(Coroutine)。
第8章将指导你通过完成一个较为复杂的应用来为使用者提供营养数据。这些数据来自一个第三方的API,并通过映射到内部的数据展示给用户。这个应用引入了很多Android中常用的工具和最佳实践,例如使用Retrofit来进行网络请求,将应用拆分为多个Fragment,并且使用一个数据仓库作为单一的真实数据来源。
第9章涵盖如何简洁地综合使用Kotlin的语言特性来创建简单的领域特定语言。这些领域特定语言能够增强代码的可读性和可靠性。
第10章为Java迁移到Kotlin提供指导,包括如何评估使用Kotlin是否合适、常见障碍以及帮助公司成功使用Kotlin的实践。
【如何使用本书】
除非你已经深刻地理解了Kotlin,否则你应该先学习第一部分,然后再去尝试完成第二部分中的应用。第5章讲述了如何与Java互操作,你可以选择跳过这一章,但是阅读这部分内容有助于你理解在底层发生了什么以及Kotlin如何编译成Java字节码。当然,即便你已经了解了Kotlin,但如果不熟悉协程,你肯定想要阅读第6章的内容。
在第二部分中,可以跳过第9章,这一章包含领域特定语言,它并不是阅读其他章节的前提条件。但是DSL是一种非常流行的Kotlin特性,它可以改善你的代码,而且它很好地概括了第1章中介绍过的有趣的语言特性。最后,如果你对如何将现有应用移植到Kotlin或者在工作中如何使用Kotlin不感兴趣,可以跳过第10章。
本书中所有相关资源、更新和新闻,请访问网站https://kotlinandroidbook.com。
这个网站提供了你在本书中所使用到的全部代码,并列出了所有相关的资源和GitHub仓库,以及本书的任何更新和勘误。简言之,它是你阅读本书和在工作中付诸实践的伴侣。本书的主GitHub仓库地址为:github.com/petersommerhoff/kotlin-for-android-app-development。
【书中约定】
本书遵循了如下几个约定。
除非另有说明,否则本书中的所有代码清单都假定它们作为Kotlin脚本文件(扩展名为.kts)运行,因此不使用main函数。第7章和第8章除外,因为它们的代码运行在Android上。
在第一部分中,标记为“在Java中需注意”的内容是为Java开发人员准备的。该内容通常会将一个概念与其对应的Java概念进行比较。如果不了解Java,则可以放心地忽略这些内容。
我的目标是准确一致地使用本书中的所有术语。如果你对一个术语不理解,可以在术语表中进行查找。
【译 者 序】
自2017年Kotlin被Google宣布为Android官方开发语言以来,虽然很多国内开发者通过各种渠道听说了用Kotlin进行Android开发的方便性,却迟迟不敢在自己或公司的项目中使用。他们或许觉得Kotlin的学习成本太高,或许害怕Kotlin会和现有的Android生态不兼容,等等。
在Kotlin发布后,我们就开始在各大生产项目中使用Kotlin进行Android项目的开发,并从开发中深深感受到了Kotlin带来的生产效率的提高和它强大的兼容性。所以,我们迫不及待地想要把Kotlin介绍给大家,希望大家都能通过使用Kotlin来体验生产力提高所带来的酣畅淋漓的感觉。
正当我们为如何把Kotlin推荐给大家而踌躇时,十分有幸得到了翻译本书的机会。我们希望能够通过这次机会向国内广大的Android开发者介绍Kotlin这门语言,也希望大家能够理解这门语言,爱上这门语言,最后在项目中使用这门语言,并享受它带来的便利。
作者在本书中通过大量的代码对Kotlin进行了深入浅出的讲解,并通过两个Android应用程序来一步步指导读者进行实践。作者还将Kotlin与Java的实现和使用方式进行了大量对比,介绍了许多实践时非常有用的小技巧。因此,本书对于初学者来说是非常容易阅读且上手实践的。希望每个读者都能通过阅读本书打消对Kotlin的顾虑,并完完全全地掌握这门语言,然后成为团队中Kotlin的推动者,让广大的Android开发者都能够了解并使用这门语言。
我们深知一本好的Kotlin书籍对于希望学习这门语言的读者来说是多么重要,也深感翻译本书的责任之重大,所以在翻译过程中一刻也不敢怠慢。我们查阅了大量关于Kotlin的资料来完善翻译细节,斟酌每一个单词,尽量做到将原文准确、清晰地翻译成中文。为了能尽快将本书翻译完成并呈现在广大读者面前,我们热情高涨地投入了几乎全部的业余时间。因此,我们要感谢家人们对翻译工作的大力支持,感谢在翻译工作中给予我们帮助的朋友,感谢本书编辑们的默默付出。
由于译者水平所限,书中难免出现疏漏之处,敬请读者不吝指正。
陈洋 王亚鑫 康颢曦 于西安
【序】
“语言的局限意味着我的世界的局限。”这句话可以追溯到生于奥地利的英国哲学家Ludwig Wittgenstein。随着现代数字化的所有领域对新软件需求的稳步增长,软件开发人员的开发效率变得越来越重要。一个重要的先决条件是选择最适合解决相关问题的编程语言。
十几年来,Java仍然是各个领域的主导语言。它之所以如此成功,最初是因为它的程序可以通过互联网下载,并在客户的计算机上以安全沙箱的形式执行,后来又因为虚拟机(VM)的存在允许开发人员从不断变化的令人烦恼的技术细节中抽离出来。此外,类型安全是该语言的核心,且由VM强制执行。目前,下一代语言就是在这些成就的基础上发展起来的。
Kotlin是这些下一代语言中最杰出的语言之一。至少在某些领域,该语言本身极有可能成为未来10年最重要的语言之一。这有很多原因,既有技术上的原因,也有与市场相关的原因。
Kotlin之所以能够在现有的年轻编程语言中脱颖而出,是因为它的受欢迎程度迅速增长,尤其是在2017年5月成为谷歌支持的Android应用程序开发的官方语言之后。这给了Kotlin一个巨大的推动力,也是各种计算机科学课程开始从目前使用Java转向更优雅的Kotlin的原因。
Kotlin提供了一个强大的工具集,因此能够快速地开发工业规模的软件。此外,因为其基于Java VM,所以可以在各种系统上轻松地执行。Kotlin也与Java兼容,可以重用各种Java库,而这种库的即时可用性是一种新语言成功的关键。
最重要的是,Kotlin也是一种强类型语言,为面向对象和高阶函数编程提供了有效的语言构造。一个强类型系统使开发人员能够自动防止许多单调乏味的错误。因为类型系统从一开始就指导我们正确地使用API,包括编辑器中的自动完成、对文档的快速访问、有效的代码导航和复杂的代码重构。但Kotlin也以各种方式放松了这种类型系统的限制,以允许高效地开发。例如,它沿着继承层次结构提供了一个类型安全的向下强制转换。最好的集成概念之一是对象类型的定义不包括null,如果需要,则要显式地添加null值,类似使用可选类型。
Kotlin还为高阶函数提供了各种语言支持,从而允许将系统的某些部分切换到函数式编程风格。集成面向对象和函数式风格为我们提供了一种强大而有效的可编程语言—为了能够确保正确地使用这些风格,掌握这两种风格是很重要的。
在本书中,Peter Sommerhoff采用了一种实用的方式,即通过大量代码清单来讲解Kotlin,展示其语言特性,并一步一步地指导读者开发两个Android应用程序。本书涵盖了Kotlin本身以及如何在Android上使用它,Peter找到了一个很好的平衡点,哪些是必要的,哪些可以留给读者以后掌握。因此,本书是一个开始Kotlin编程的有效且易于理解的开端。
敬请享受本书吧!
Sommerhoff采用了一种实用的方式,即通过大量代码清单来讲解Kotlin,展示其语言特性,并一步一步地指导读者开发两个Android应用来熟悉这些特性……本书是一个学习Kotlin编程的有效且易懂的良好途径。
—— Bernhard Rumpe,德国亚琛工业大学软件工程学院教授
评论
还没有评论。