Kotlin 诞生于 2010 年,出自 JetBrains,并于2012年正式开源。Kotlin 最初的设计目的是为了创建一种兼容 Java 的编程语言,并让它比 Java 更好。
作为一门相对比较新的 JVM 语言,Kotlin 与其他曾经“叫嚣”取代 Java 的语言有着截然不同的命运。2017年,Google 在 I/O 开发者大会上官宣 Kotlin 正式成为 Android 官方开发语言 。两年后的 I/O 大会上,Google 再次加码 Kotlin,宣布其成为 Andoid 开发官方首选语言 。
多年来,在 Google 的大力推广下,Kotlin 在 Android 社区受到的关注度越来越高,也有不少国内开发者开始转移到 Kotlin 进行 Android 开发。尽管如此,许多 Android 开发人员仍然在犹豫,“ 迁移到 Kotlin 是否是一条正确的道路?”
为进一步了解 Kotlin 目前在国内 Android 开发领域的现状与发展趋势,我们邀请到爱回收终端技术部负责人、Android 开发专家沈哲,就相关问题对其进行了采访,希望能够给想要接触和了解 Kotlin 的 Android 开发者带来启发。
以下为采访内容:
沈哲:
Kotlin 的语法融合了 Scala、Groovy、Python、Swift 等众多语言的特性,如果使用过其中任意一门语言,上手 Kotlin 是非常容易的。花几天熟悉过语法之后,就可以直接进行开发。
Kotlin 是一门务实的语言,函数式思想、各种语法糖、协程等等特性都是打动我的地方。
特别是,Kotlin 函数式编程方式相比于 Java 是思想上的变化。Kotlin 的各种语法糖简化了代码量。Kotlin 的协程吸收了各家语言协程的特性,同时让异步编程变得简单。
沈哲:
我整理了 Kotlin 几个方面的优势:
1. Kotlin 的语法糖多,能够减少代码量。
2. 从编码层面上能够减少空指针的产生,因为需要对变量在 null 上的检查,以及支持"?."、"?:"来处理 null
3. 兼容 Java 的语法,不像 Scala 那样另起炉灶。因此,绝大多数第三方 Java 库可以直接使用。
4. IDE 层面支持直接将 Java 代码转换成 Kotlin。
5. 相比于 Java 8,更好地支持 lambda 表达式。
沈哲:
当前越来越多的开发者,会选择 Kotlin 作为原生 App 的首选开发语言。去年这个时候,已有调查报告显示大约有40%的开发者使用了 Kotlin。 Kotlin 已经超越 Scala 和 Clojure ,成为 JVM 上第二大受欢迎的语言。
就我所在的部门而言,Android 新的项目、包括 sdk 的项目都是采用 Kotlin 进行开发的。爱回收其他部门的 Android 项目也大都会使用到 Kotlin。我在上一家公司时,也要求 Android 团队开始使用 Kotlin 开发 Android App。
沈哲:
我们创新部门使用的后端语言主要是 Kotlin、Python。Kotlin 用于提供 API 服务,Python 用于深度学习。Kotlin 的使用者大都是 Java 开发者,他们使用 Kotlin 之后,普遍觉得 Kotlin 容易上手、简化代码。当然,如果 想要使用好这门语言,而不是只是当 Java 来使用,那还是需要一些编程思想上的转变。建议开发者可以去补充一些函数式编程的知识。
沈哲:
Kotlin 本身需要完善 Multiplatform 的功能、提升性能, 这也是 Kotlin 1.4 值得期待的地方。
随着 React Native、Flutter 等跨平台技术的兴起,越来越多的公司采用这些技术进行混合开发。使用这些跨平台技术比较适合开发 UI 层,但是对操作系统底层 API 的调用、多线程的使用并不适用。
很多 App 的业务逻辑相对复杂,需要针对不同的移动平台单独去实现。如果能够借助 Kotlin Multiplatform 技术开发通用的业务逻辑,则大大提高开发效率。
沈哲:
我个人比较期待的新特性还有以下几个:
1. 之前,Kotlin 的 SAM 转换用于提高 Kotlin 调用 Java 的便利性。并且只适用于 Kotlin 对 Java 的调用,而且必须是 Java 接口。在 Kotlin 1.4 之后,也可以将其与 Kotlin 函数和接口一起使用。
2. Kotlin 1.4 将使用新的,功能更强大的类型推断算法。
3. Kotlin/Native 性能的提升。
(目前 Kotlin 1.4 已经发布了 第一个里程碑版本 ,想了解更多 Kotlin 1.4 新特性可查看: Kotlin 1.4 )
沈哲:
相比 iOS,Android 有一个天然的优势是可以应用于物联网(IoT)。例如 Google 的 Android Things 操作系统,它可以直接复用现有的 Android 知识。
If you can build an app, you can build a device. 只要你会开发APP,你就能开发智能设备。而物联网是未来一段时间的发展趋势,对于新人开发者来说是个很好的发展方向。
沈哲:
其实无论身处什么时代,程序员都需要拥有扎实的计算机基础和快速的学习能力。
具备上述两点,Kotlin、Flutter、Vue 等这些语言和框架都可以快速掌握。
表现层的技术总是日新月异,而恒古不变的技术才是最重要的。
移动端的开发者想要具备更好的竞争力,可以考虑深挖一些领域。例如音视频、图像处理、终端侧的 AI 等等。
关于提升自己,本质是一个不断学习、不断复盘总结,从而不断迭代的过程。
就拿我们自己做的手机自助回收项目来说,由于它涉及了各种通信协议、图像识别等技术,比较复杂,在项目初期 我存在着很强的挫败感。但随着项目的推进、产品的迭代,以及自身的不断学习,我在此过程中加深了对项目的认知以及对整个系统架构的理解,也提升了自己从整体出发解决问题的能力。
采访嘉宾介绍
沈哲,计算机软件与理论硕士,拥有10年移动开发经验,曾负责魔窗深度链接 SDK 的设计和研发(该产品已于2019年初卖给极光);曾负责京东到家上海的移动团队,全程参与今夜酒店特价App的开发,Decarta Map SDK的开发;拥有多年的服务端开发经验,曾负责京东旅行邮轮业务部门的后端团队,著有《RxJava 2.x 实战》。目前在爱回收创新中心,担任终端技术部负责人,负责隐私清除产品线以及手机自助回收机(MTA) 相关的研发。