新書推薦:
《
创建教练文化:十字路口的组织升级
》
售價:NT$
347.0
《
量子力学 恩利克·费米
》
售價:NT$
245.0
《
马长寿内陆欧亚学文存(全三集)
》
售價:NT$
2030.0
《
银行业刑事风险防控与应对
》
售價:NT$
449.0
《
语言、使用与认知
》
售價:NT$
321.0
《
帝国的叙事话语:国家身份塑造与冷战时期美国外交政策 北京大学人文学科文库
》
售價:NT$
704.0
《
世界上的城堡:一部千年古堡兴衰史(从军事建筑到中世纪城堡,59座经典古堡,高清全彩图文,精装收藏品质)
》
售價:NT$
1214.0
《
缪斯的诞生 现代西方艺术观念生成简史
》
售價:NT$
398.0
編輯推薦:
(1)源自大名鼎鼎的Big Nerd Ranch训练营培训讲义,该训练营已经为Google、Facebook、微软等行业巨头培养了众多专业人才。
(2)以循序渐进的方式精心编排章节,从基础的变量与集合开始,逐渐深入到面向对象编程和函数式编程技术,使用Kotlin的官方方法运行异步代码,并涉猎Kotlin的跨平台能力。
(3)通过贯穿全书的示例项目,在实践中掌握Kotlin编程语言。
(4)多章设计的“好奇之处”环节更详细地阐述Kotlin语言的底层机制,便于更深入地理解Kotlin,并进一步扩展知识。
(5)多章设计的“挑战之处”环节,助力巩固所学知识,通过附加的问题提升Kotlin技能。
详细讨论Kotlin代码与Java代码的等效性以及Kotlin与其他语言的相似之处,有助于理解Kotlin与所支持平台之间的关系。
內容簡介:
通过搭建书中的示例项目,可以循序渐进地掌握Kotlin 的用法。全书以循序渐进的方式精心编排章节,从基础的变量与集合开始,逐渐深入到面向对象编程和函数式编程技术。首先使用IntelliJ IDEA搭建沙盒项目,引领读者熟悉开发环境。接下来介绍Kotlin编程知识,从较为基础的变量、常量、类型等讲起,逐渐深入到继承、对象和抽象类。最后是函数式编程、Kotlin与Java互操作、构建Android应用等较复杂的内容。书中章节通过搭建各种示例项目,在实践中掌握Kotlin编程语言, 每章均有“深入学习”和“挑战练习”环节,帮助巩固所学知识。
關於作者:
安德鲁·贝利(Andrew Bailey)毕业于佐治亚理工学院,是Big Nerd Ranch的Android工程师和讲师。
戴维·格林哈尔希(David Greenhalgh)毕业于佐治亚理工学院,FanDuel的高级工程经理,Big Nerd Ranch的前Android团队经理和讲师。
乔希·斯基恩(Josh Skeen)是Square的高级软件工程师,Big Nerd Ranch前讲师。
高慧敏,嘉兴大学教授。浙江省嘉兴光伏技术创新服务平台主任,《系统仿真学报》编委会委员,长三角G60科创走廊专家咨询委员会专家。主要从事复杂系统建模与仿真、生产优化与调度等领域的科研工作。
目錄 :
第一部分入门
第1章第一个Kotlin应用程序
1.1安装IntelliJ IDEA
1.2第一个Kotlin项目
1.2.1创建第一个Kotlin文件
1.2.2运行Kotlin文件
1.2.3Kotlin/JVM代码的编译和执行
1.3Kotlin REPL
1.4好奇之处: 为什么使用IntelliJ
1.5好奇之处: 面向JVM
1.6挑战之处: REPL算术运算
第2章变量、常量和类型
2.1类型
2.2声明变量
2.3Kotlin的内置类型
2.4只读变量
2.5类型推断
2.6编译时常量
2.7检查Kotlin字节码
2.8好奇之处: Kotlin中的Java基本类型
2.9挑战之处: hasSteed
2.10挑战之处: The Unicorns Horn酒吧
2.11挑战之处: 魔镜
第二部分基本语法
第3章条件判断
3.1if/else语句
3.2区间
3.3when表达式
3.4挑战之处: 灵活使用区间
第4章函数
4.1将代码提炼为函数
4.2函数剖析
4.3函数调用
4.4自定义函数
4.5默认实际参数
4.6单表达式函数
4.7Unit函数
4.8命名函数的实际参数
4.9好奇之处: Nothing类型
4.10好奇之处: Java中的文件级函数
4.11好奇之处: 函数重载
4.12好奇之处: 反引号中的函数名
第5章数值
5.1数值类型
5.2整数
5.3浮点数
5.4格式化双精度数值
5.5在数值类型之间进行转换
5.6好奇之处: 无符号数
5.7好奇之处: 位运算
第6章字符串
6.1字符串插值
6.2原始字符串
6.3从控制台读取输入
6.4将字符串转换为数值
6.5正则表达式
6.6字符串操作
6.7字符串比较
6.8好奇之处: Unicode
第7章空安全和异常处理
7.1Nullability
7.2Kotlin的显式Null类型
7.3编译时和运行时
7.4空安全
7.4.1选项1: 使用if语句检查null值
7.4.2选项2: 安全调用运算符
7.4.3选项3: nonnull断言运算符
7.5异常
7.5.1抛出异常
7.5.2异常处理
7.5.3try/catch表达式
7.6前置条件
7.7好奇之处: 自定义异常
7.8好奇之处: 已检查的异常和未检查的异常
第三部分函数式编程和Collection
第8章Lambda表达式和函数类型
8.1NyetHack简介
8.2匿名函数
8.3Lambda表达式
8.3.1函数类型
8.3.2隐式返回值
8.3.3函数的实际参数
8.3.4it标识符
8.3.5接收多个实际参数
8.4类型推断支持
8.5更有效的Lambda
8.6定义一个以函数为参数的函数
8.7函数内联
8.8Lambda和Kotlin标准库
8.9有趣之处: 函数引用
8.10好奇之处: 捕获Lambda
8.11挑战之处: 新头衔和新情绪
第9章List和Set
9.1List
9.1.1访问List中的元素
9.1.2更改List中的内容
9.2重复迭代
9.3将文件读入List中
9.4解构化
9.5Set
9.5.1创建一个Set
9.5.2向Set中添加元素
9.6while循环
9.7Collection之间的转换
9.8有趣之处: Array类型
9.9好奇之处: 只读的与不可变的
9.10好奇之处: break表达式
9.11好奇之处: Return标签
9.12挑战之处: 格式化的酒馆菜单
9.13挑战之处: 更高级的格式化酒馆菜单
第10章Map
10.1创建一个Map
10.2访问Map的值
10.3向Map中添加条目
10.4修改Map的值
10.5在List与Map之间进行转换
10.6在Map中迭代
10.7挑战之处: 复杂的订单
第11章函数式编程基础
11.1转换数据
11.1.1map()函数
11.1.2associate()函数
11.1.3使用函数式编程进行解构
11.1.4flatMap()函数
11.1.5map()函数 vs flatMap()函数
11.2过滤数据
11.3组合函数
11.4为什么选择函数式编程
11.5Sequence
11.6好奇之处: 性能分析
11.7好奇之处: 聚合数据
11.7.1reduce()函数
11.7.2fold()函数
11.7.3SumBy()函数
11.8好奇之处: 关键字vararg
11.9好奇之处: Arrow.kt
11.10挑战之处: 翻转Map中的值
11.11挑战之处: 找出最喜爱的商品
第12章作用域函数
12.1apply()函数
12.2let()函数
12.3run()函数
12.4with()函数
12.5also()函数
12.6takeIf()函数
12.7使用作用域函数
第四部分面向对象编程
第13章类
13.1定义类
13.2构建实例
13.3类函数
13.4可见性和封装
13.5类属性
13.6使用软件包
13.7好奇之处: 详细解析var和val属性
13.8好奇之处: 防止可变性
13.9好奇之处: Package Private
第14章初始化
14.1构造函数
14.1.1主构造函数
14.1.2在主构造函数中定义属性
14.1.3次构造函数
14.1.4默认实际参数
14.1.5命名实际参数
14.2初始化程序块
14.3初始化顺序
14.4延迟初始化
14.4.1后期初始化
14.4.2惰性初始化
14.5好奇之处: 初始化陷阱
14.6好奇之处: 属性代理
14.7挑战之处: 圣剑Excalibur之谜
第15章继承
15.1定义room类
15.2创建一个子类
15.3类型检查
15.4Kotlin的类型层次结构
15.4.1类型强制转换
15.4.2智能强制转换
15.5重构酒馆
15.6好奇之处: Any类
15.7好奇之处: 安全的强制转换运算符
第16章对象、数据类和枚举类
16.1对象关键字
16.1.1对象声明
16.1.2对象表达式
16.1.3伴生对象
16.2嵌套类
16.3数据类
16.3.1toString()函数
16.3.2equals()函数和hashCode()函数
16.3.3Copy()函数
16.3.4解构声明
16.4枚举类
16.5运算符重载
16.6探索NyetHack的世界
16.7好奇之处: 定义结构比较
16.8好奇之处: 代数数据类型
16.9好奇之处: 值类
16.10挑战之处: 更多的命令
16.11挑战之处: 实现一个游戏世界地图
16.12挑战之处: 敲响钟声
第17章接口和抽象类
17.1定义接口
17.2实现接口
17.3默认实现
17.4抽象类
17.5在NyetHack中进行战斗
17.6挑战之处: 更多的怪物
第五部分高级Kotlin
第18章泛型
18.1定义泛型类型
18.2泛型函数
18.3泛型约束
18.4in和out
18.5添加Loot至NyetHack
18.6好奇之处: 关键字reified
第19章扩展
19.1定义扩展函数
19.1.1在超类上定义一个扩展函数
19.1.2通用扩展函数
19.1.3运算符扩展函数
19.2扩展属性
19.3对Nullable类型的扩展
19.4扩展的实现原理
19.5扩展的可见性
19.6Kotlin标准库中的扩展
19.7好奇之处: 带有接收器的函数字面量
19.8挑战之处: 框架扩展
第20章协程
20.1阻塞调用
20.2启用协程
20.3协程构建器
20.4协程作用域
20.5结构化并发
20.6使用HTTP客户端
20.7async和await
20.8好奇之处: 竞态条件
20.9好奇之处: 服务器端Kotlin
20.10挑战之处: 不允许取消
第21章流
21.1设置流
21.2MutableStateFlow
21.3流终止
21.4流转换
21.5流中的错误处理
21.6好奇之处: SharedFlow
第22章通道
22.1使用通道对工作进行拆分
22.2发送至通道
22.3从通道中接收
22.4关闭通道
22.5加入jobs
22.6好奇之处: 其他的通道行为
22.6.1会合通道
22.6.2缓冲通道
22.6.3无限制通道
22.6.4合并通道
第六部分互操作和跨平台应用
第23章Java互操作性
23.1与Java类进行交互
23.2互操作性和Nullity
23.3类型映射
23.4Getter、Setter和互操作性
23.5超越类
23.6异常和互操作性
23.7Java中的函数类型
第24章Kotlin跨平台简介
24.1什么是Kotlin跨平台
24.2规划跨平台项目
24.3第一个跨平台项目
24.4定义Kotlin/JVM平台
24.5定义共享代码
24.6expect和actual
第25章Kotlin/Native
25.1声明一个macOS平台
25.2使用Kotlin编写本机代码
25.3启动一个Kotlin/Native应用程序
25.4Kotlin/Native输出
25.5好奇之处: Kotlin移动跨平台
25.6好奇之处: 其他本机平台
第26章Kotlin/JS
26.1宣布对Kotlin/JS的支持
26.2与DOM进行交互
26.3关键字external
26.4执行原始的JavaScript
26.5Dynamic类型
26.6好奇之处: 前端框架
26.7挑战之处: 货币兑换费
第27章后记
27.1展望
27.2宣传
27.3致谢
內容試閱 :
2011年,JetBrains公司宣布开发Kotlin编程语言,这是一种在Java虚拟机上运行的替代Java或Scala编写代码的语言。6年后,Google公司宣布Kotlin成为Android操作系统官方支持的开发语言。
作为一个前途光明的编程语言,Kotlin很快成为全世界最重要的移动操作系统应用程序的编程语言。Kotlin具有语法简洁,可以与传统Java代码无缝互操作等特点,包括Google、Uber、Netflix、Amazon等,都因其突出的优点选择了Kotlin。
为什么是Kotlin
要想理解Kotlin强大的吸引力,首先需要了解Java在现代软件开发领域中的作用。这两种语言密切相关,因为Kotlin代码通常是为Java虚拟机编写的。
Java是一种强大且经受了时间考验的语言,多年来一直是生产代码库中最常用的语言之一。然而,自从Java在1995年发布以来,我们对于什么是优秀的编程语言有了很多新的认识。对于使用更现代化语言的开发人员来说,Java缺少许多先进的功能。
Kotlin受益于从Java(以及其他语言,如Scala等)中获得的经验教训,因为一些设计决策在Java中已经过时。Kotlin在老旧语言的基础上不断进化,并纠正了它们的缺陷。在接下来的章节将介绍更多有关Kotlin如何改进Java并提供更可靠开发体验的内容。
Kotlin不仅是一个能在Java虚拟机上运行的语言,它还是一种跨平台语言,旨在成为通用的编程语言: Kotlin可用于编写本机macOS、iOS、Windows、JavaScript以及Android等应用程序。近年来,JetBrains公司一直致力于投资这些跨平台功能。Kotlin跨平台提供了一种独特的方式来共享应用程序之间的代码,并且使得Kotlin的应用范围超越了Java。
本书面向的读者
这是一本面向各类开发人员的书: 有经验的Android开发人员; 想要超越Java提供的现代功能; 对Kotlin的功能感兴趣的服务器端开发人员; 想要在本机或Web应用程序之间共享Kotlin代码的开发人员; 想要进入高性能编译语言领域的新手开发人员等。
本书并不仅限于Kotlin在Android上的编程,实际上,本书中所有的Kotlin代码都与Android框架无关。当然,如果有兴趣使用Kotlin进行Android应用程序开发,本书也展示了一些常见的用Kotlin编写Android应用程序模式。
尽管Kotlin受到许多其他语言的影响,但也可以不需要了解其他语言的细节直接学习Kotlin。书中随时会讨论Kotlin代码与Java代码的等效性,以及Kotlin与其他语言的相似之处。如果有这些语言的使用经验,将有助于理解Kotlin与所支持平台之间的关系。即使不熟悉这些,但看到另一种语言如何解决相同的问题也有助于掌握Kotlin开发的原则。
如何使用本书
本书不是一本参考指南。其目标是指导读者理解Kotlin编程语言中最重要的部分,通过项目实例逐步学习并积累知识。为了充分利用本书,建议在阅读过程中将书中的示例代码逐字输入。通过完成这些项目,可以帮助建立肌肉记忆,并为后续章节的学习提供支持。
此外,本书的每章节都建立在上一章节所介绍的主题之上,因此建议不要跳跃式地阅读。即使觉得自己熟悉其他语言中的某个主题,也建议读者按顺序阅读——Kotlin以独特的方式处理许多问题。从变量和控制流等入门主题开始,逐步掌握面向对象和函数式编程技术,尝试使用Kotlin的官方方法运行异步代码,并涉猎Kotlin的跨平台能力。通过本书的学习,读者可以从一个初学者逐渐转变为一个更高级的开发者,并逐步建立对Kotlin的深入理解。
扫描书中提供的二维码可获得Kotlin参考文档,供读者深入了解任何感兴趣的内容,并进行实验。本书旨在为读者提供一个全面的入门指南,但学习编程需要时间和实践,所以不要急于求成。
好奇之处
本书的大部分章节中包括一个或两个名为“好奇之处”的小节,此部分着重介绍Kotlin语言的底层机制。章节中的示例并不依赖此部分内容,但它们提供了额外的信息,有利于Kotlin学习,有助于更深入地理解Kotlin,进一步扩展知识。如果对某个主题感到好奇或想要深入了解,建议阅读这些附加内容。
挑战之处
本书的很多章节都以一个或多个“挑战之处”结尾,通过这些附加的问题,进一步加深对Kotlin的理解。建议读者尝试解决这些问题,以提升Kotlin技能。这些挑战可以巩固所学知识,并将其应用于实际的编程场景中。
其他章节通常会在先前的解决方案基础上进行构建,为了不影响到后续章节的学习,建议在尝试挑战之前对已完成项目进行备份,还可以扫描书中提供的二维码获得网址,下载书中练习题的解答。
排版约定
在构建本书中的项目时,首先会介绍一个主题,然后展示如何应用新学习的知识。为了清晰起见,书中遵循以下的排版约定。
(1) 变量、值和类型使用等宽字体显示。类、函数和接口名称使用加粗字体。
(2) 所有程序清单都以等宽字体显示。如果需要在程序清单中键入某些代码,该部分代码将用粗体表示。如果需要在程序清单中删除某些代码,该部分代码将使用删除线划掉。在以下示例中,删除定义变量y的行,并添加一个名为z的变量:
var x = ”Python”
var y = ”Java”
var z = ”Kotlin”
(3) Kotlin是一门成熟的语言,其编码规范随着时间的推移仍在不断发展。虽然每位读者都可能会形成自己的编码风格,但书中遵循了JetBrains和Google的Kotlin编码规范。JetBrains的编码规范和Google的风格指南可扫描相关二维码获得链接。
展望未来
在学习过程中慢慢消化书中的示例,一旦掌握了Kotlin的语法,就会发现书中示例的开发过程清晰、务实而流畅。在此之前,请继续努力,学习一门新的语言会带来丰厚的回报。