Kotlin实战

Kotlin实战 pdf epub mobi txt 电子书 下载 2025

[美] Dmitry Jemerov(德米特里·詹莫瑞福),[美] Svetlana Isakova(斯维特拉娜·伊凡诺沃) 著,覃宇,罗丽,李思阳,蒋扬海 译
图书标签:
  • Kotlin
  • 编程
  • Android
  • 移动开发
  • 函数式编程
  • 实用指南
  • 代码示例
  • 开发技巧
  • JetBrains
  • 现代开发
想要找书就要到 新城书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 电子工业出版社
ISBN:9787121321580
版次:1
商品编码:12224904
品牌:Broadview
包装:平装
开本:16开
出版时间:2017-08-01
用纸:胶版纸
页数:360

具体描述

编辑推荐

  

  《Kotlin 实战》教会你使用 Kotlin 语言来开发达到产品级品质的应用。《Kotlin 实战》为具备一定 Java 经验的开发者编写,包含了丰富的示例,和大多数介绍编程语言的书籍相比更加深入,涵盖了非常有趣的话题,例如怎样构建使用自然语言语法的 DSL。两位作者是 Kotlin 的核心开发者,所以你完全可以相信《Kotlin 实战》中细枝末节的内容都无比地精确。

  ● 在 JVM 上进行函数式编程

  ● 编写整洁并符合语义习惯的代码

  ● 结合运用 Kotlin 和 Java

  ● 领域特定语言


  

内容简介

  

  《Kotlin实战》将从语言的基本特性开始,逐渐覆盖其更多的高级特性,尤其注重讲解如何将 Koltin 集成到已有 Java 工程实践及其背后的原理。《Kotlin实战》分为两个部分。第一部分讲解如何开始使用 Kotlin 现有的库和API,包括基本语法、扩展函数和扩展属性、数据类和伴生对象、lambda 表达式,以及数据类型系统(着重讲解了可空性和集合的概念)。第二部分教你如何使用 Kotlin 构建自己的 API,以及一些深层次特性——约定和委托属性、高阶函数、泛型、注解和反射,以及领域特定语言的构建。本书适合广大移动开发者及入门学习者,尤其是紧跟主流趋势的前沿探索者。

作者简介

  原著作者简介

  本书作者JetBrains为Kotlin的核心开发者,DmitryJemerov从2003年起就在JetBrains工作并参与了许多产品的开发,包括IntelliJIDEA、PyCharm和WebStorm。他是Kotlin早的贡献者之一,创建了初版本的KotlinJVM字节码生成器,并且还在世界各地的活动上做了很多关于Kotlin的演示。之前他带领了进军KotlinIntelliJIDEA插件开发的团队。SvetlanaIsakova从2011年成为Kotlin团队的一员。她从事编译器类型推导和重载解析该系统的工作。现在她是一名技术布道者,在各种会议上进行Kotlin相关讨论并从事Kotlin在线课程的相关工作。

  

  译者简介

  覃宇,ThoughtWorks高级咨询师,10余年移动应用开发经验,Android技术专家,曾为AOSP贡献过测试用例;目前专注于移动应用的架构设计、自动化测试以及持续交付。

  罗丽,高级软件工程师,移动技术开发顾问,拥有丰富的软件开发经验,熟悉ReactNative,Android,iOS等多种开发技术。目前任职于ThoughtWorks海外事业部,曾在多个大型移动应用项目中担任技术顾问。

  李思阳,ThoughtWorks咨询师,移动开发工程师。熟悉Android、MobileWeb相关技术,有着丰富的移动应用开发经验,在移动应用体验和兼容性相关领域有独特的见解;长期关注Android领域相关技术动向。

  蒋扬海,ThoughtWorks移动开发咨询师,深耕Android开发多年,应用开发经验丰富,对Android开发领域的技术有广泛的涉猎,对Android技术动向有着敏锐的洞察力。


精彩书评

  

  开发者想完成他们的工作——同时越省事越好。使用 Kotlin 编码就意味着省事。Kotlin 编程语言提供了赋有表现力的语法,强大直观的类型系统和美妙的工具支持,还有与现存 Java 代码、库及框架无缝的互操作性。Kotlin 可以被编译成 Java 字节码,所以你可以在所有使用 Java 的地方使用它,包括 Android 在内。借助高效的编译器和标准库,Kotlin 在运行时几乎不用承受任何额外开销。

  ——kotlin核心开发者


  

  “既阐释了高级概念,也提供了足够深入的细节。”

  — 摘自 Kotlin 首席设计师 Andrey Breslav 作的序


  

  “这本书保持了 Manning 实战系列的水准,满足了你快速提高生成力的所有需要。”

  — Kevin Orr Sumus Solutions


  

  “有这本书指导你,Kotlin 学起来有趣又简单!”

  — Filip Pravica Info.nl


  

  “写得非常全面,非常好,浅显易懂。”

  — Jason Lee NetSuite


  

目录

第 1 部分 Kotlin 简介1

1 Kotlin :定义和目的3

1.1 Kotlin 初体验3

1.2 Kotlin 的主要特征4

1.2.1 目标平台 :服务器端、Android 及任何 Java 运行的地方4

1.2.2 静态类型5

1.2.3 函数式和面向对象6

1.2.4 免费并开源7

1.3 Kotlin 应用8

1.3.1 服务器端的 Kotlin8

1.3.2 Android 上的 Kotlin9

1.4 Kotlin 的设计哲学10

1.4.1 务实10

1.4.2 简洁11

1.4.3 安全12

1.4.4 互操作性13

1.5 使用 Kotlin 工具14

1.5.1 编译 Kotlin 代码14

1.5.2 IntelliJ IDEA 和 Android Studio 插件15

1.5.3 交互式 shell15

1.5.4 Eclipse 插件15

1.5.5 在线 playground15

1.5.6 Java 到 Kotlin 的转换器16

1.6 小结16

2 Kotlin 基础17

2.1 基本要素 :函数和变量17

2.1.1 Hello,world!18

2.1.2 函数18

2.1.3 变量20

2.1.4 更简单的字符串格式化 :字符串模板22

2.2 类和属性23

2.2.1 属性24

2.2.2 自定义访问器25

2.2.3 Kotlin 源码布局 :目录和包26

2.3 表示和处理选择 :枚举和“when”28

2.3.1 声明枚举类28

2.3.2 使用“when”处理枚举类29

2.3.3 在“when”结构中使用任意对象30

2.3.4 使用不带参数的“when”31

2.3.5 智能转换 :合并类型检查和转换32

2.3.6 重构 :用“when”代替“if”34

2.3.7 代码块作为“if”和“when”的分支35

2.4 迭代事物 :“while”循环和“for”循环36

2.4.1 “while”循环36

2.4.2 迭代数字 :区间和数列37

2.4.3 迭代 map38

2.4.4 使用“in”检查集合和区间的成员39

2.5 Kotlin 中的异常41

2.5.1 “try”“catch”和“finally”41

2.5.2 “try”作为表达式42

2.6 小结44

3 函数的定义与调用45

3.1 在 Kotlin 中创建集合45

3.2 让函数更好调用47

3.2.1 命名参数48

3.2.2 默认参数值49

3.2.3 消除静态工具类 :顶层函数和属性50

3.3 给别人的类添加方法 :扩展函数和属性53

3.3.1 导入和扩展函数54

3.3.2 从 Java 中调用扩展函数54

3.3.3 作为扩展函数的工具函数55

3.3.4 不可重写的扩展函数56

3.3.5 扩展属性58

3.4 处理集合 :可变参数、中缀调用和库的支持59

3.4.1 扩展 Java 集合的 API59

3.4.2 可变参数 :让函数支持任意数量的参数60

3.4.3 键值对的处理 :中缀调用和解构声明60

3.5 字符串和正则表达式的处理62

3.5.1 分割字符串62

3.5.2 正则表达式和三重引号的字符串63

3.5.3 多行三重引号的字符串64

3.6 让你的代码更整洁 :局部函数和扩展66

3.7 小结68

4 类、对象和接口69

4.1 定义类继承结构70

4.1.1 Kotlin 中的接口70

4.1.2 open、final 和 abstract 修饰符 :默认为 final72

4.1.3 可见性修饰符 :默认为 public75

4.1.4 内部类和嵌套类 :默认是嵌套类76

4.1.5 密封类 :定义受限的类继承结构79

4.2 声明一个带非默认构造方法或属性的类80

4.2.1 初始化类 :主构造方法和初始化语句块80

4.2.2 构造方法 :用不同的方式来初始化父类83

4.2.3 实现在接口中声明的属性85

4.2.4 通过 getter 或 setter 访问支持字段87

4.2.5 修改访问器的可见性88

4.3 编译器生成的方法 :数据类和类委托89

4.3.1 通用对象方法89

4.3.2 数据类 :自动生成通用方法的实现92

4.3.3 类委托 :使用“by”关键字93

4.4 “object”关键字 :将声明一个类与创建一个实例结合起来95

4.4.1 对象声明 :创建单例易如反掌95

4.4.2 伴生对象 :工厂方法和静态成员的地盘98

4.4.3 作为普通对象使用的伴生对象100

4.4.4 对象表达式 :改变写法的匿名内部类102

4.5 小结104

5 Lambda 编程105

5.1 Lambda 表达式和成员引用105

5.1.1 Lambda 简介 :作为函数参数的代码块106

5.1.2 Lambda 和集合107

5.1.3 Lambda 表达式的语法108

5.1.4 在作用域中访问变量111

5.1.5 成员引用114

5.2 集合的函数式 API116

5.2.1 基础 :filter 和 map116

5.2.2 “all”“any”“count”和“find”: 对集合应用判断式118

5.2.3 groupBy :把列表转换成分组的 map119

5.2.4 flatMap 和 flatten :处理嵌套集合中的元素120

5.3 惰性集合操作 :序列121

5.3.1 执行序列操作 :中间和末端操作123

5.3.2 创建序列125

5.4 使用 Java 函数式接口126

5.4.1 把 lambda 当作参数传递给 Java 方法127

5.4.2 SAM 构造方法 :显式地把 lambda 转换成函数式接口129

5.5 带接收者的 lambda :“with”与“apply”131

5.5.1 “with”函数131

5.5.2 “apply”函数133

5.6 小结135

6 Kotlin 的类型系统137

6.1 可空性137

6.1.1 可空类型138

6.1.2 类型的含义140

6.1.3 安全调用运算符 :“?:”141

6.1.4 Elvis 运算符 :“?:”143

6.1.5 安全转换 :“as?”145

6.1.6 非空断言 :“!!”146

6.1.7 “let”函数148

6.1.8 延迟初始化的属性149

6.1.9 可空类性的扩展151

6.1.10 类型参数的可空性153

6.1.11 可空性和 Java153

6.2 基本数据类型和其他基本类型157

6.2.1 基本数据类型 :Int、Boolean 及其他158

6.2.2 可空的基本数据类型 :Int?、Boolean? 及其他159

6.2.3 数字转换160

6.2.4 “Any”和“Any?”:根类型162

6.2.5 Unit 类型 :Kotlin 的“void”163

6.2.6 Nothing 类型 :“这个函数永不返回”164

6.3 集合与数组164

6.3.1 可空性和集合165

6.3.2 只读集合与可变集合167

6.3.3 Kotlin 集合和 Java168

6.3.4 作为平台类型的集合171

6.3.5 对象和基本数据类型的数组173

6.4 小结175

第 2 部分 拥抱 Kotlin177

7 运算符重载及其他约定179

7.1 重载算术运算符180

7.1.1 重载二元算术运算180

7.1.2 重载复合赋值运算符183

7.1.3 重载一元运算符184

7.2 重载比较运算符186

7.2.1 等号运算符 :“equals"186

7.2.2 排序运算符 :compareTo187

7.3 集合与区间的约定188

7.3.1 通过下标来访问元素 :“get”和“set”188

7.3.2 “in”的约定190

7.3.3 rangeTo 的约定191

7.3.4 在“for”循环中使用“iterator”的约定192

7.4 解构声明和组件函数193

7.4.1 解构声明和循环194

7.5 重用属性访问的逻辑 :委托属性195

7.5.1 委托属性的基本操作196

7.5.2 使用委托属性 :惰性初始化和“by lazy()”197

7.5.3 实现委托属性198

7.5.4 委托属性的变换规则202

7.5.5 在 map 中保存属性值203

7.5.6 框架中的委托属性204

7.6 小结205

8 高阶函数 :Lambda 作为形参和返回值207

8.1 声明高阶函数207

8.1.1 函数类型208

8.1.2 调用作为参数的函数209

8.1.3 在 Java 中使用函数类211

8.1.4 函数类型的参数默认值和 null 值212

8.1.5 返回函数的函数214

8.1.6 通过 lambda 去除重复代码216

8.2 内联函数 :消除 lambda 带来的运行时开销218

8.2.1 内联函数如何运作219

8.2.2 内联函数的限制221

8.2.3 内联集合操作222

8.2.4 决定何时将函数声明成内联223

8.2.5 使用内联 lambda 管理资源223

8.3 高阶函数中的控制流225

8.3.1 lambda 中的返回语句 :从一个封闭的函数返回225

8.3.2 从 lambda 返回 :使用标签返回226

8.3.3 匿名函数 :默认使用局部返回228

8.4 小结229

9 泛型231

9.1 泛型类型参数232

9.1.1 泛型函数和属性232

9.1.2 声明泛型类234

9.1.3 类型参数约束235

9.1.4 让类型形参非空237

9.2 运行时的泛型 :擦除和实化类型参数238

9.2.1 运行时的泛型 :类型检查和转换238

9.2.2 声明带实化类型参数的函数241

9.2.3 使用实化类型参数代替类引用243

9.2.4 实化类型参数的限制244

9.3 变型 :泛型和子类型化245

9.3.1 为什么存在变型 :给函数传递实参245

9.3.2 类、类型和子类型246

9.3.3 协变 :保留子类型化关系248

9.3.4 逆变 :反转子类型化关系252

9.3.5 使用点变型 :在类型出现的地方指定变型254

9.3.6 星号投影 :使用 * 代替类型参数257

9.4 小结261

10 注解与反射263

10.1 声明并应用注解264

10.1.1 应用注解264

10.1.2 注解目标265

10.1.3 使用注解定制 JSON 序列化267

10.1.4 声明注解269

10.1.5 元注解 :控制如何处理一个注解270

10.1.6 使用类做注解参数271

10.1.7 使用泛型类做注解参数272

10.2 反射 :在运行时对 Kotlin 对象进行自省273

10.2.1 Kotlin 反射 API :KClass、KCallable、KFunction 和

KProperty274

10.2.2 用反射实现对象序列化278

10.2.3 用注解定制序列化279

10.2.4 JSON 解析和对象反序列化283

10.2.5 反序列化的最后一步 :callBy() 和使用反射创建对象287

10.3 小结291

11 DSL 构建293

11.1 从 API 到 DSL293

11.1.1 领域特定语言的概念295

11.1.2 内部 DSL296

11.1.3 DSL 的结构297

11.1.4 使用内部 DSL 构建 HTML298

11.2 构建结构化的 API:DSL 中带接收者的 lambda299

11.2.1 带接收者的 lambda 和扩展函数类型299

11.2.2 在 HTML 构建器中使用带接收者的 lambda303

11.2.3 Kotlin 构建器 :促成抽象和重用307

11.3 使用“invoke”约定构建更灵活的代码块嵌套310

11.3.1 “invoke”约定 :像函数一样可以调用的对象310

11.3.2 “invoke”约定和函数式类型311

11.3.3 DSL 中的“invoke”约定 :在 Gradle 中声明依赖312

11.4 实践中的 Kotlin DSL314

11.4.1 把中缀调用链接起来 :测试框架中的“should”314

11.4.2 在基本数据类型上定义扩展 :处理日期316

11.4.3 成员扩展函数 :为 SQL 设计的内部 DSL317

11.4.4 Anko :动态创建 Android UI320

11.5 小结322

A 构建 Kotlin 项目323

B Kotlin 代码的文档化327

精彩书摘

  译者序

  当收到这本书的翻译邀请时,我们的内心是激动的,终于有机会将自己喜爱的语言系统地介绍给中国的开发者,而且是通过口碑颇佳的实战系列。此时,正值2017年度的GoogleI/O召开前夕,接下来重磅消息大家都知道了:在GoogleI/O大会上,Kotlin正式成为了官方的Android开发语言,迅速占据了国内各大技术媒体的头条。一夜之间,所有的Android开发者都迫切地想搞清楚它的来龙去脉。Kotlin究竟是何方神圣,为什么是它?

  这一点儿也不奇怪。对于资深Android开发者来说,Kotlin早已不是新鲜的概念了。早在2015年1月,Android开发者社区大神JakeWharton就发布了一篇使用Kotlin来进行Android开发的总结。那时开始,不少顶尖的开发者和公司就开始尝试在正式的Android项目中使用Kotlin语言;我们也从2015年开始在多个项目上使用了Kotlin语言。它带给我们的体验,和带给所有其他实践过Kotlin语言的开发者的一样:它的发明者JetBrains所言非虚,这是一门简洁、安全、实用的语言,用了就停不下来,就忍不住地想推荐给周围的人。我们理所当然地把Kotlin放在了今年第一季度ThoughtWorks技术雷达的评估象限:https://www.thoughtworks.com/radar/languages-and-frameworks/kotlin。

  Kotlin让人爱不释手的最重要原因就是来自JetBrains的基因。作为最负盛名的IDE创造者,JetBrains深谙开发者的需求,孜孜不倦地追求给开发者提供最实用、最高效的IDE,包括AndroidStudio、IntelliJ、RubyMine等。由这样想开发者之所想的公司创造出来的语言,又怎么会不受开发者热捧呢?所以Gradle、Spring,以及越来越多的库、框架和工具也陆续加入到了支持Kotlin的阵营。

  本书深入浅出地介绍了Kotlin语言的方方面面,从最基础的语言要素到如何定制自己的DSL都有涉及。相信读者阅读本书并尝试之后一定会爱上这门语言,但把Kotlin应用到自己的项目中会不会有什么风险呢?读者们大可不必担心,以往的经验告诉我们,整个过程无缝无痛。首先,Kotlin足够简单,对于初学者来说掌握也不算困难,两三天就可以上手;其次,Kotlin和Java可以无缝地衔接,可以在遗留项目上和Java混用;最后,编译器的静态检查和IDE(必须是JetBrains出品的IntelliJIDEA或者AndroidStudio)强大的辅助功能,可以帮你发现很多问题(例如空指针异常)并将其自动消除在摇篮之中。有的读者会说,但我还没有用过这些IDE啊?那你还在犹豫什么,请立即使用它们来提高你的生产力吧!这也算是使用Kotlin带来的额外收获。

  从Kotlin成为Android开发语言的那一刻开始,我们热情高涨地投入了几乎全部业余时间到本书的翻译工作,终于在最短的时间内把它呈现在广大读者面前。这一切还要感谢本书的编辑和所有译者家人在背后的默默付出。由于译者水平所限,难免出现谬误遗漏,还望读者海涵斧正。

  覃宇、罗丽、李思阳、蒋扬海

  2017年6月于ThoughtWorks成都

  序

  当我在2010年春季第一次拜访JetBrains的时候,我相当确定世界上不需要另一种通用编程语言了。我认为现有的JVM上的语言已经足够好了,谁会有想法去创建一门新语言呢?在经过大约一个小时的关于大规模代码库上产品问题的讨论后我被完全说服了,并且后来成为Kotlin一部分的最初想法就已经被描绘在白板上。很快我就加入了JetBrains来主导这门语言的设计与编译器的开发工作。

  到今天,六年多的时光过去了,我们也快要发布第二个版本。我们已经拥有超过30人的团队和数以千计的活跃用户,还有很多让我们难以轻易实现的精彩的设计理念。但是不要担心,这些想法在进入这门语言之前还必须经过缜密的考察。我们希望这本书的篇幅依然能够容得下Kotlin的未来。

  学习一门编程语言是一个令人兴奋而且常常是回报颇丰的尝试。如果它是你的第一门语言,通过它你能学到整个编程的新世界。如果不是,它会使你以新的术语来思考熟悉的东西,从而以更高层次的抽象来更深入地了解它们。本书主要针对后者,即面向已经熟悉Java的读者。

  从头开始设计一门语言可能是一项具有挑战性的任务,但是使其与另一门语言融洽的工作就是另一回事了——尤其是那门语言还包含了许多的愤怒的食人魔,以及一些阴暗的地牢(在这一点上你如果不相信可以去问C++的创造者BjarneStroustrup)。与Java的互操作性(这就是Java与Kotlin之间是如何互相混合调用的)是Kotlin的基石之一,本书也投入了很多的注意力在这一点上。互操作性对于在一个已有的Java代码库中逐步地引入Kotlin非常重要。即使从头开始开发一个新项目时,也必须考虑到能够将这门语言融入一个拥有更大图景的平台中去,而以Java编写的所有函数库就是这样的一个平台。

  当我在编写本书时,两个新的目标平台正在开发:Kotlin现在可以在JavaScript虚拟机上运行以支持全栈web开发,并且还将很快能够直接编译成原生代码,从而在需要的时候能够脱离任何的虚拟机来运行。1所以,虽然本书是面向JVM的,但是你从中学到的很多东西也是可以应用于其他运行环境的。

  本书作者从项目伊始就已经是Kotlin团队的成员,所以他们对语言本身和内部实现非常熟悉。他们在会议演讲、研讨会及Kotlin课程方面的经验使他们能够对预期的常见问题及可能的陷阱,提供良好的阐述。本书既阐释了语言特征背后的高级概念,也提供了足够深入的细节。

  希望你能享受与我们的语言及本书相处的时光。正如我经常在我们社区的帖子中说的那样:使用Kotlin愉快!

  ANDREYBRESLAV,JetBrainsKotlin首席设计师


前言/序言

  关于Kotlin想法的构思2010年诞生于JetBrains。当时,JetBrains已经是许多程序语言开发工具的知名供应商,包括Java、C#、JavaScript、Python、Ruby和PHP。JavaIDE——IntelliJIDEA,Groovy和Scala的插件,都是我们的旗舰产品。

  为各种程序语言构建开发工具的经验给了我们对语言设计领域全面的理解和独特的观点。而基于IntelliJ平台的IDE,包括IntelliJIDEA,仍然是用Java开发的。我们甚至都有点羡慕在.NET团队中的同事,他们使用C#,一种现代、强大、迅速进化的语言进行开发。但是我们没有看到任何一种可以用来取代Java的语言。

  对于这样的一门语言我们有哪些要求呢?首要而且最明确的要求就是它必须是静态类型的。我们想象不到其他任何一种——开发一个拥有数百万行代码的代码库许多年后——还不把人逼疯的办法。其次,我们需要与现有的Java代码完全兼容。这样的代码库是JetBrains的一笔巨大财富,我们承受不起失去它或是因为互操作性的难度而使其贬值的损失。再次,我们不愿意在工具质量方面接受任何的妥协。开发者的生产力是JetBrains作为一个公司最重要的价值,而强大的工具是达到这一目的的必要条件。最后,我们需要的是一种易于学习和理解的语言。

  当看到一个我们公司未能满足的需要时,我们知道其他公司也处在一个相似的境地,我们希望我们的解决方案能够在JetBrains之外找到许多用户。带着这样的初心,我们决定走上一条创建一门新语言:Kotlin的道路。事实上,这个项目花费了超出我们预期的时间,在Kotlin1.0最终诞生时,距离第一行代码提交到代码库中已经过去了超过五年;但是现在我们可以确信,这门语言找到了它的受众并且这些人都留了下来。

  Kotlin以靠近俄罗斯圣彼得堡的一座岛屿命名,Kotlin的大部分开发团队就在那里。在使用岛屿命名这件事上,我们遵循了Java和Ceylon确立的先例,但我们决定选用一处靠近我们家乡的地方(在英语中,这个名称通常的发音是“cot-lin”,而不是“coat-lin”或者“caught-lin”)。

  在这门语言临近发布之际,我们意识到一本由参与了语言设计决策人员撰写的关于Kotlin的书籍是有价值的,他们可以自信地解释为什么Kotlin中的事物是以它们的方式运行的。本书就是这种努力的结果,我们希望它能帮助你学习和理解Kotlin语言。祝你好运,并愿你一直能愉快地进行开发。

  关于本书

  《Kotlin实战》会教你Kotlin编程语言,以及如何使用它构建运行在Java虚拟机和Android平台的应用程序。这本书开始部分讲解了这门语言的基本特性,并逐渐覆盖更多Kotlin与众不同的方面,比如它对构建高级抽象和领域特定语言的支持。

  这本书很注重将Kotlin与已有的Java工程的集成,帮助你将Kotlin引入到你现在的工作环境。这本书涵盖了Kotlin1.0,在编写这本书的同时Kotlin1.1已经在开发过程中了,所以在一些可能的地方,我们提示了1.1版本中做出的更改。但是由于在写这本书的时候新的版本还没有完成,我们并不能在书中包含所有的内容。对于进行中的新特性和改变的更新,请参考线上的官方文档https://kotlinlang.org。

  哪些人应该阅读这本书

  《Kotlin实战》主要面向有一定Java经验的开发者。Kotlin的构建基于Java中的许多概念和技术,这本书争取通过使用你现有的知识快速上手。如果你只是刚开始学习Java,又或者你有诸如C#或者JavaScript这些编程语言的经验,你可能需要参考其他的信息源以理解Kotlin中与JVM交互的那些错综复杂的方面,但你还是可以通过这本书学习Kotlin。我们致力于将Kotlin打造成全领域语言,而不是只针对某些特定的问题领域,所以这本书同样对服务端、Android,以及其他任何以构建基于JVM的工程为目标的开发人员都有用。

  这本书是如何组织的

  这本书被分成了两个部分。第1部分解释了如何开始使用Kotlin现有的库和API:

  第1章讲述了Kotlin的关键目标、价值和应用的领域,它将向你展示运行Kotlin代码的所有可能的途径。

  第2章解释了Kotlin编程的基本元素,包括控制结构、变量和函数声明。

  第3章讲解了Kotlin中关于函数声明的细节并介绍了扩展函数和扩展属性的概念。

  第4章集中在类的声明上,并介绍了数据类和伴生对象的概念。

  第5章介绍了Kotlin中lambda的使用并展示了一些Kotlin标准库中使用lambda的函数。

  第6章描述Kotlin的数据类型系统,并特别关注了可空性和集合的话题。

  第2部分会教你如何使用Kotlin构建你自己的API和抽象,并涵盖了这门语言的一些深层次的特性。

  第7章讲到了约定原则,它利用特定的名字赋予函数和属性特殊的意义,还介绍了委托属性的概念。

  第8章展示了如何声明高阶函数——以其他函数作为参数或者返回值的函数,还介绍了内联函数的概念。

  第9章深入探讨Kotlin中泛型的话题,先讲了基本语法然后是更高级的领域,比如实化类型参数和变型。

  第10章包括注解和反射的使用,并以JKid为中心。JKid是大量使用了这些概念的一个小而真实的JSON序列化库。

  第11章介绍了领域特定语言的概念,描述用来构建它的Kotlin工具,并演示了许多DSL示例。

  还有三个附录。附录A说明了如何用Gradle、Maven和Ant构建Kotlin代码;附录B着重于编写文件注释和为Kotlin模块生成API文档;附录C是一个探索Kotlin生态圈和发现最新的在线信息的指南。

  最好是按顺序通读本书,但是也完全可以只查阅感兴趣的包含特定主题的单个章节,在遇到不熟悉的概念的时候再参考其他章节。



探寻代码的优雅艺术:从零开始的程序设计之旅 这本《探寻代码的优雅艺术》,并非旨在传授某种特定语言的 syntax 或 API,而是致力于引导读者进入一个更广阔、更深邃的编程世界。它是一场关于“如何思考”的探索,而非仅仅是“如何实现”的堆砌。我们将一同深入剖析那些构成优秀软件的基石——那些跨越语言、适用于任何编程范式的核心理念与实践。 第一部分:思维的觉醒——解锁编程的内在逻辑 我们并非从具体的代码指令开始,而是从“问题是什么”出发。本书将首先引导读者建立一种“抽象思维”的能力。什么是一个“问题”?如何将其分解为更小、更易于管理的子问题?我们将探讨“问题域”的理解,以及如何将其映射到计算机可以理解的逻辑结构。这不仅仅是数学上的分解,更是对现实世界事物本质的提炼,学会用“模型”来描述和操作信息。 接着,我们将聚焦于“算法思维”。算法并非冰冷的指令序列,而是解决特定问题的“步骤指南”。我们不会去死记硬背各种排序或查找算法,而是去理解算法背后的“效率考量”——为什么某些方法比其他方法更快?在处理海量数据时,微小的效率差异会带来天壤之别。我们将学习如何分析算法的“时间复杂度和空间复杂度”,理解“O(n)”、“O(log n)”等表示法的含义,并学会根据实际场景选择最合适的“解决方案”。这其中,“递归”和“迭代”作为两种强大的思考工具,其内在联系与适用场景将被深入剖析,帮助读者摆脱思维定势,灵活运用。 逻辑推理是编程的灵魂。我们将深入理解“布尔逻辑”,以及如何通过“条件语句”(if-else, switch-case)和“循环结构”(for, while)来控制程序的执行流程。更重要的是,我们将学习如何构建“清晰、可读、可维护”的代码,避免那些容易引发 bug 的“臭虫”。例如,如何合理地使用“括号”,如何避免“逻辑嵌套过深”,以及如何通过“命名规范”来传达代码的意图。 第二部分:构建的智慧——从构建模块到系统蓝图 一旦掌握了思维的工具,我们便开始动手“构建”。本书将强调“数据结构”的重要性,理解它们如何组织和存储信息,并如何影响算法的效率。我们将探讨“列表”(List)、“数组”(Array)、“栈”(Stack)、“队列”(Queue)、“链表”(Linked List)等基本数据结构,理解它们各自的优缺点,以及在什么场景下选用最能发挥效用。我们还将初步接触“树”(Tree)和“图”(Graph)等更复杂的数据结构,了解它们在现实世界中的广泛应用,例如文件系统、社交网络等。 “函数”是编程中最基本的构建块。我们将学习如何设计“模块化、可重用”的函数,如何通过“参数”传递信息,如何通过“返回值”产生结果。更重要的是,我们将探讨“函数式编程”的思想,理解“纯函数”的概念——即函数的输出仅依赖于输入,并且没有副作用。这有助于我们编写出更易于测试、更易于推理的代码。“闭包”(Closure)和“高阶函数”(Higher-Order Function)这些看似抽象的概念,将被以直观的方式呈现,展现它们在提升代码表达力和灵活性方面的强大威力。 代码的组织并非随意为之。我们将深入探讨“面向对象编程”(Object-Oriented Programming, OOP)的思想。“类”(Class)和“对象”(Object)是其中的核心。我们将学习如何通过“封装”(Encapsulation)来隐藏内部细节,如何通过“继承”(Inheritance)来实现代码的复用,以及如何通过“多态”(Polymorphism)来编写更具适应性的代码。理解这三大特性,将极大地提升我们设计复杂系统的能力。 “接口”(Interface)和“抽象类”(Abstract Class)将作为连接不同模块的桥梁。它们定义了“应该做什么”,而具体的实现则交给不同的对象。这将帮助我们构建出“松耦合、易扩展”的系统。 第三部分:质量的追求——编写健壮、可维护的代码 代码不仅仅要能运行,更要“健壮”和“可维护”。我们将深入学习“错误处理”(Error Handling)和“异常处理”(Exception Handling)。如何预测可能发生的错误,并优雅地处理它们,避免程序崩溃?“try-catch-finally”等机制的正确使用,以及如何定义有意义的错误类型,都将是重点。 “测试”是保证代码质量的关键。我们不只是在程序运行后进行简单的手动验证,而是要学习编写“单元测试”(Unit Test)、“集成测试”(Integration Test),甚至“端到端测试”(End-to-End Test)。理解“测试驱动开发”(Test-Driven Development, TDD)的理念,将帮助我们写出更符合需求、更少 bug 的代码。 “版本控制”是现代软件开发不可或缺的一环。我们将学习使用“Git”等工具,理解“提交”(Commit)、“分支”(Branch)、“合并”(Merge)等概念,以及如何与团队协作,协同开发。这不仅是技术的掌握,更是团队协作的基石。 代码的“可读性”往往被忽视,但它却是长期维护的关键。我们将学习如何编写“清晰的注释”,如何使用“有意义的变量名和函数名”,以及如何遵循“代码风格指南”。这些细节看似微不足道,却能极大地降低其他开发者(包括未来的自己)理解和修改代码的难度。 第四部分:进阶的视野——并发、异步与现代模式 随着对基础的深刻理解,我们将触及更高级的概念。“并发”(Concurrency)和“并行”(Parallelism)的差异与应用,将帮助我们充分利用多核处理器的能力,提升程序的执行效率。理解“线程”(Thread)、“进程”(Process)的概念,以及如何安全地共享数据,避免“竞态条件”(Race Condition)和“死锁”(Deadlock)。 “异步编程”(Asynchronous Programming)将是处理 I/O 密集型任务的关键。如何避免阻塞式的操作,让程序在等待资源时也能继续处理其他任务?我们将探索“回调”(Callback)、“Promise”、“Async/Await”等机制,理解它们如何构建响应迅速的应用程序。 “设计模式”(Design Patterns)是前人智慧的结晶,它们是解决常见设计问题的“成熟的解决方案”。我们将介绍一些经典的设计模式,例如“工厂模式”(Factory Pattern)、“单例模式”(Singleton Pattern)、“观察者模式”(Observer Pattern)等,理解它们各自的应用场景和优缺点,并学会如何灵活运用,提升代码的灵活性和可扩展性。 本书的最终目标,是帮助读者建立一种“持续学习”的能力。编程的世界日新月异,新的语言、新的框架层出不穷。但只要掌握了核心的思维方式、构建智慧和质量追求,便能快速适应新的技术,成为一名真正的“代码匠人”。我们并非要你成为某个特定领域的专家,而是希望你能够“举一反三”,在任何编程语言、任何开发环境中,都能游刃有余地解决问题,创造出优雅、高效、可靠的软件。这,便是《探寻代码的优雅艺术》所要带给你的,一场关于思维、构建与品质的深度旅行。

用户评价

评分

这本书给我的感觉,就像是在一个精美的博物馆里,每一件展品都经过精心挑选和布置,让你在欣赏美的同时,也能深入了解其背后的历史和文化。作者在讲解Kotlin的特性时,总是能够以一种非常艺术化的方式呈现,比如在描述泛型约束的时候,他并没有简单地罗列语法,而是通过一个构建灵活数据结构的例子,让你直观地感受到泛型在类型安全和代码复用方面的强大作用。我特别喜欢书中关于扩展函数的讲解,它让我想到了“四两拨千斤”的智慧,在不修改原有类的前提下,为它增添新的功能,这在代码重构和API扩展方面,简直是太方便了。还有,书中关于作用域函数(如`let`, `apply`, `with`, `run`, `also`)的讲解,我之前一直对它们混淆不清,但这本书通过一个又一个精妙的例子,让我彻底明白了它们各自的适用场景和使用技巧,我现在写代码时,简直离不开它们了。总的来说,这本书不仅仅是一本技术书籍,更像是一件艺术品,它用流畅的语言、精美的排版、恰当的比喻,将Kotlin的魅力展现得淋漓尽致,让我每读一页都充满惊喜。

评分

这本书我算是从头到尾认认真真啃了一遍,过程嘛,就像在攀登一座巍峨的山峰,一开始确实有点气喘吁吁,但每征服一个小坡,都能收获一份成就感。我尤其喜欢它在介绍新概念时那种循序渐进的逻辑,不会一上来就丢给你一堆深奥的术语,而是从最基础的概念讲起,然后逐步深入,让你在不知不觉中掌握了核心思想。举个例子,书中关于协程的部分,它先是用一个很形象的比喻解释了什么是“并发”,再通过一系列简单的代码示例,清晰地展示了协程的启动、挂起和恢复,这让我在面对那些复杂的异步编程场景时,不再感到无从下手。而且,它不仅仅是告诉你“怎么做”,更重要的是“为什么这么做”,通过深入分析不同实现方式的优劣,让你真正理解背后的设计哲学,这对于我这种喜欢刨根问底的学习者来说,简直是太有帮助了。我还能记起,在学习到关于DSL(领域特定语言)的章节时,作者通过一个构建DSL的实际例子,让我看到了Kotlin在提高代码可读性和表达力方面的强大能力,那一刻,我真的感受到了Kotlin的优雅和强大。当然,过程中也有一些地方需要反复琢磨,但这种深度和细致,恰恰是这本书最宝贵的地方,它不是那种“看一遍就懂”的书,而是需要你静下心来,反复咀嚼,才能真正领悟其精髓。

评分

对我来说,这本书就像一位博学的向导,带领我在Kotlin的世界里进行一场充满发现的旅行。我们从 Kotlin 的基本语法开始,一路探索到更复杂的并发模型和元编程的奥秘。这本书最让我赞赏的是它对代码质量和工程实践的关注。它不只教你如何写出能运行的代码,更教你如何写出易于理解、易于维护、可扩展性强的代码。我记得在关于数据类(Data Classes)的章节,它不仅仅介绍了自动生成的`equals()`、`hashCode()`、`toString()`等方法,还深入探讨了如何通过`copy()`方法实现不可变性,以及这在函数式编程和并发场景下的重要意义。这一点对我影响很大,让我开始反思自己过去的代码风格。另外,书中关于序列(Sequences)的讲解也让我受益匪浅,它清晰地阐述了序列相对于集合在延迟计算和性能优化方面的优势,并且通过具体的对比实验,让我直观地感受到了这种差异。这本书的每一章都像是一个独立的知识模块,但它们之间又有着紧密的联系,层层递进,最终勾勒出一幅 Kotlin 的全景图。我感觉这本书不仅仅是教我一项技术,更是提升了我整体的编程视野和解决问题的能力。

评分

这本书给我最大的感受就是“接地气”。我不是科班出身的程序员,在接触Kotlin之前,我尝试过不少编程语言,但总觉得隔着一层什么,不够顺手。而这本书,它就好像一位经验丰富的老大哥,用最直观、最贴近实际开发需求的方式,把Kotlin的方方面面都展现在我面前。它不会回避那些实际开发中会遇到的坑,反而会提前帮你踩一遍,告诉你如何避免,如何更有效地解决问题。我记得书里讲到内存管理和垃圾回收的部分,它没有空谈理论,而是结合Android开发中的具体场景,分析了内存泄漏的常见原因以及如何使用Kotlin的特性来预防,这对我这个Android开发者来说,简直是福音。而且,书中提供的那些代码示例,都非常贴近实际项目,我甚至可以直接复制粘贴到我的项目中进行修改和运用,大大节省了学习和开发的时间。我还特别欣赏书中关于函数式编程思想的介绍,它并没有把它说得高高在上,而是通过一系列简单易懂的例子,展示了如何用函数式的方式来编写更简洁、更健壮的代码,这让我对编程的理解又上升了一个层次。总而言之,这本书给我最大的价值在于,它让我觉得Kotlin不再是遥不可及的,而是触手可及的,它让我能够快速地将所学知识应用到实际工作中,并从中获得成就感。

评分

我一直认为,一本好的技术书籍,不仅要传授知识,更要激发读者的思考。这本书在这方面做得非常出色。它并没有把Kotlin的各种特性一股脑地堆砌给你,而是通过深入浅出的讲解,引导你思考“为什么Kotlin要设计成这样?”,以及“在什么场景下使用这些特性会更有效?”。我记得书中关于空安全的部分,它不仅仅是告诉你`?`和`!!`的用法,而是深入分析了Java中NPE(NullPointerException)带来的痛苦,以及Kotlin如何从语言层面解决这个问题,让你真正认识到空安全的重要性。还有,书中关于委托(Delegation)的讲解,我一开始觉得这个概念有点抽象,但作者通过一个巧妙的例子,将它与设计模式中的“组合”联系起来,让我豁然开朗,也让我对Kotlin的灵活性有了更深的认识。我还能想起,书中在讨论协程和RxJava的区别时,它并没有一味地推崇Kotlin,而是客观地分析了各自的优缺点,让你能够根据实际情况做出更明智的选择。这本书的价值,就在于它不仅仅教会你Kotlin的语法,更教会你如何用Kotlin的思维方式去解决问题,如何写出更优雅、更高效的代码。

评分

哈哈还哈哈哈哈哈哈哈哈哈哈哈

评分

不错的书,会一直看下去的,希望会有用的吧,这次一次性买了好多

评分

发货快发货快发货快发货快发货快,还没看,包装好

评分

这本书讲的都说如何使用kt啊,没有涉及到原理东西

评分

不错,高级进阶的好书,讲解全面,值得学习

评分

听说最近kotlin还可以,尝试尝试,学一门新语言吧。。。

评分

618活动买的,比较便宜,崭新的。好久没看实体书了

评分

这本书不错,经典

评分

这本书看着不错,还没仔细研读

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.cndgn.com All Rights Reserved. 新城书站 版权所有