Kotlin 核心编程 (11):认识 Kotlin 1.3.2

阅读数:1 2019 年 12 月 25 日 15:32

Kotlin核心编程(11):认识Kotlin 1.3.2

(更好的 Java)

内容简介
本书不是一本简单介绍 Kotlin 语法应用的图书,而是一部专注于帮助读者深入理解 Kotlin 的设计理念,指导读者实现 Kotlin 高层次开发的实战型著作。书中深入介绍了 Kotlin 的核心语言特性、设计模式、函数式编程、异步开发等内容,并以 Android 和 Web 两个平台为背景,演示了 Kotlin 的实战应用。
全书共 13 章,分为 4 个部分:
热身篇—Kotlin 基础(第 1~2 章),简单介绍了 Kotlin 设计哲学、生态及基础语法,其中包括 Kotlin 与 Scala、Java 之间的关联与对比,以及 Kotlin 的类型声明的特殊性、val 和 var 的使用、高阶函数的使用、面向表达式编程的使用、字符串的定义与操作等内容;
下水篇—Kotlin 核心(第 3~8 章),深入介绍了面向对象、代数数据类型、模式匹配、类型系统、Lambda、集合、多态、扩展、元编程等 Kotlin 开发核心知识,这是本书的重点,其中涉及很多开发者特别关心的问题,比如多继承问题、模式匹配问题、用代数数据类型抽象业务问题、泛型问题、反射问题等。
潜入篇—Kotlin 探索(第 9~11 章),探索 Kotlin 在设计模式、函数式编程、异步和并发等编程领域的应用,其中包括对 4 大类设计模式、Typeclass 实现、函数式通用结构设计、类型替代异常处理、共享资源控制、CQRS 架构等重点内容的深入剖析;
遨游篇—Kotlin 实战(第 12~13 章),着重演示了 Kotlin 在 Android 和 Web 平台的实战案例,其中涉及架构方式、单向数据流模型、解耦视图导航、响应式编程、Spring 5 响应式框架和编程等内容。

如果你用 Kotlin 开发过业务,很快就会意识到它相较于 Java 的语法更加简洁、高效。比如 Kotlin 做了这些改良:

  • 在很大程度上实现了类型推导,而 Java 在 SE 10 才支持了局部变量的推导。
  • 放弃了 static 关键字,但又引入了 object,可以直接用它来声明一个单例。而作为比较,Java 则必须依靠构建所谓的“单例模式”才能等效表达。
  • 引入了一些在 Java 中没有的“特殊类”,比如 Data Classes(数据类)、Sealed Classes(密封类),我们可以构建更深程度上的代数数据类型,结合 when 表达式来使用。

但可能你会问,以上 Kotlin 的特性,Scala 也有,能否可以说前者只是后者的一个子集呢?这种表述其实是不恰当的。其实,Kotlin 在致力于成为更好的 Java 的道路上,不仅仅依靠这些新增的语言特性,它在兼容 Java 方面做了大量的工作,比 Scala 走得更远。

首先,从语言命名上就可以看出 Kotlin 在严格遵循 Java 的传统,它们都采用了岛屿的名字。

Java 的名字来源于印度尼西亚瓜哇岛的英文名称,而 Kotlin 是俄罗斯圣彼得堡附近的一个岛屿的名字。

其次,虽然都是兼容 Java,Scala(最近的几个版本)必须要求 Java 8,而 Kotlin 则可以与 Java 6 一起工作,这也是后者在 Android 上更加流行的原因之一。

另外,Kotlin 并没有像 Scala 那样在语法的探索上表现得“随心所欲”,Java 程序员在学习 Kotlin 新语法特性的同时,依旧可以保留更多原有的习惯。举个例子,在 Scala 中,一切皆有类型。所以在大部分时间里,我们都用等号来定义一个 Scala 的函数。函数体最后一个表达式的值就是这个函数的返回类型。

复制代码
def foo(x: Int) = {
val y = x + 2
x + y
}

没错,Scala 舍弃了 return 关键字。在 Kotlin 中,它也引入了使用单行表达式来定义函数的语法,不需要用 return 来返回结果值。

复制代码
fun foo(x: Int) = x * 2 + 2

然而,大部分情况下,我们还是可以采用类似 Java 的方式来定义一个函数,如:

复制代码
fun foo(x: Int): Int {
val y = x * 2
return y + 2
}

由于 Kotlin 比 Scala 更加兼容 Java 的生态和语法,Java 程序员可以更加容易地掌握它。同时,Kotlin 非常注重语法的简洁表达。如果你了解 Scala 中的 implicit,可能曾被这个 Scala 的语法惊吓到,因为它非常强大。然而,正如我们提到的,“简单灵活”的另一面意味着抽象和晦涩。Kotlin 注重的是工程的实用性,所以它创造了扩展的语法,虽然相比 implicit 在功能上有损失,但显得更加具体直观,且依旧非常强大,可满足日常开发中绝大多数的需求。值得一提的是,Android 则依靠这个 Java 所没有的特性,推出了扩展库 android-ktx,我们在第 7 章将专门介绍这种强大的特性。

此外,Kotlin 还新增了一些 Java、Scala 中没有的语法糖。如果你从事 Android 开发,那么肯定少不了在工程中写过如下的 Java 代码:

复制代码
if(parentView instanceof ViewGroup){
((ViewGroup) parentView).addView(childView);
}

为了类型安全,我们不得不写两遍 ViewGroup。然而在 Kotlin 中我们却可以直接这么写:

复制代码
if(parentView is ViewGroup){
parentView.addView(childView)
}

这依靠的是 Kotlin 中的 Smart Casts 特性。我们不评价这种语法糖是好是坏,但它可以在一定程度上改善我们在工程开发中的体验。

总体而言,Kotlin 旨在成为一门提升 Java 生产力的更好的编程语言,它拥有简洁的表达能力、强大的工具支持,同时至今仍然保持着非常快速的编译能力。相较而言,用 Scala 开发则常常受到编译过慢带来的困扰。

Kotlin核心编程(11):认识Kotlin 1.3.2

购书地址 https://item.jd.com/12519581.html?dist=jd

评论

发布