v1.4 发布在即,诞生近 10 年的 Kotlin 取代 Java 了吗 ?

大东BE 发布于 04/13 17:41
阅读 10K+
收藏 18

领取 1000元人民币SageMaker大礼包!>>>

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 相对来说是一个比较新的语言,它在哪些方面打动了您,让您选择使用 Kotlin 来进行移动端开发呢?

沈哲:

Kotlin 的语法融合了 Scala、Groovy、Python、Swift 等众多语言的特性,如果使用过其中任意一门语言,上手 Kotlin 是非常容易的。花几天熟悉过语法之后,就可以直接进行开发。

Kotlin 是一门务实的语言,函数式思想、各种语法糖、协程等等特性都是打动我的地方。

特别是,Kotlin 函数式编程方式相比于 Java 是思想上的变化。Kotlin 的各种语法糖简化了代码量。Kotlin 的协程吸收了各家语言协程的特性,同时让异步编程变得简单。

 

据我们了解,Kotlin 是为了弥补 Java 的部分缺点而诞生的,那么与传统的安卓开发语言 (Java)相比,Kotlin 的优势体现在哪些方面,或者说它弥补了 Java 的哪些缺点呢?

沈哲:

我整理了 Kotlin 几个方面的优势:

1. Kotlin 的语法糖多,能够减少代码量。

2. 从编码层面上能够减少空指针的产生,因为需要对变量在 null 上的检查,以及支持"?."、"?:"来处理 null

3. 兼容 Java 的语法,不像 Scala 那样另起炉灶。因此,绝大多数第三方 Java 库可以直接使用。

4. IDE 层面支持直接将 Java 代码转换成 Kotlin。

5. 相比于 Java 8,更好地支持 lambda 表达式。

 

近年来 Kotlin 发展势头很猛,Google 也将 Kotlin 列为安卓开发推荐语言,网上也有很多朋友在讨论 Kotlin 是否会取代 Java 在安卓开发中的地位,那么当前使用 Kotlin 开发 Android 应用的现状是怎样的?有很多人已经转到 Kotlin 上了吗?

沈哲:

当前越来越多的开发者,会选择 Kotlin 作为原生 App 的首选开发语言。去年这个时候,已有调查报告显示大约有40%的开发者使用了 Kotlin。Kotlin 已经超越 Scala 和 Clojure,成为 JVM 上第二大受欢迎的语言。

就我所在的部门而言,Android 新的项目、包括 sdk 的项目都是采用 Kotlin 进行开发的。爱回收其他部门的 Android 项目也大都会使用到 Kotlin。我在上一家公司时,也要求 Android 团队开始使用 Kotlin 开发 Android App。

 

Java 诞生了这么多年,用户人群也相当庞大,对于这部分开发者转到学习 Kotlin 会有哪些难点?以及怎样克服呢?

沈哲:

我们创新部门使用的后端语言主要是 Kotlin、Python。Kotlin 用于提供 API 服务,Python 用于深度学习。Kotlin 的使用者大都是 Java 开发者,他们使用 Kotlin 之后,普遍觉得 Kotlin 容易上手、简化代码。当然,如果想要使用好这门语言,而不是只是当 Java 来使用,那还是需要一些编程思想上的转变。建议开发者可以去补充一些函数式编程的知识。

 

如果接下来使用 Kotlin 开发安卓想要发展得更好,Kotlin 本身的生态还有哪些需要优化的地方?

沈哲: 

Kotlin 本身需要完善 Multiplatform 的功能、提升性能,这也是 Kotlin 1.4 值得期待的地方。

随着 React Native、Flutter 等跨平台技术的兴起,越来越多的公司采用这些技术进行混合开发。使用这些跨平台技术比较适合开发 UI 层,但是对操作系统底层 API 的调用、多线程的使用并不适用。

很多 App 的业务逻辑相对复杂,需要针对不同的移动平台单独去实现。如果能够借助 Kotlin Multiplatform 技术开发通用的业务逻辑,则大大提高开发效率。

 

既然您提到了即将更新的 Kotlin 1.4 版本,能否谈谈对于新版本除了 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

 

请您对比一下 Android 与 iOS 当前的开发状况,Android 还有优势吗?

沈哲:

相比 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) 相关的研发。

 

为了让大家更清晰地认识 Kotlin 与 Andorid 开发的趋势,我们邀请到沈哲老师来到源创会栏目,开展主题为“如何使用 Kotlin 高效地开发 App ”的直播活动,直播时间为 4月17日 20:00,感兴趣的朋友千万不要错过。

详情请查看:如何使用 Kotlin 进行高效地开发 App

 

加载中
2
快乐的一只小青蛙
快乐的一只小青蛙

管他妈妈嫁给谁呢, 反正都不用。想要靠兼容Java来颠覆Java,我觉得挺难

sicai
sicai
回复 @平安OSC : 是的 为了获取Java的用户而选择兼容jvm
平安OSC
平安OSC
这个不是兼容java,而是兼容jvm
依剑_听雨
依剑_听雨
typescript 是个好例子
网瘾少年徐志摩
网瘾少年徐志摩
用魔法打败魔法,最后胜利的是谁呢
2
这波天秀
这波天秀

以前安卓开发百分百要求会Java,现在你去搜,大约有一半要求会kotlin,你说呢

1
哒不溜滴滴
哒不溜滴滴

我看到这个标题, 第一反应是, 原来我都这么老了...

0
开源中国首席罗纳尔多
开源中国首席罗纳尔多

您好,请问是有提供一个jar去将kotlin转成class的吗?

MGLEE
MGLEE
是基于jvm的语言 最后都是class啊
开源中国首席罗纳尔多
开源中国首席罗纳尔多
回复 @平安OSC : 您好,java不是可以自举吗?网上查了说java解析器现在是用java重写了的?
平安OSC
平安OSC
回复 @开源中国首席罗纳尔多 : 你这逻辑有问题,Java写不了底层怎么会是Java写的?Windows 平台上的java编译器是一个exe,kotlin跟Java平级,都是高级语言层面,结构都是一样的,都是编译成class,Java用什么编译,kotlin就是用什么编译,具有同样的jvm
开源中国首席罗纳尔多
开源中国首席罗纳尔多
回复 @平安OSC : 您好,我是指kt编译器是java写的吗?
平安OSC
平安OSC
回复 @开源中国首席罗纳尔多 : idea,肯定是java写的
下一页
0
xiaolei123
xiaolei123
Java8都没有办法代替Java5你指望一个外来语言?
0
九离天
九离天

不算务实吧,有点 hualihushao

0
mycms2013
mycms2013
老谷扶不起 然后自立golang了
0
g
gaoxiaoyuan

语言最重要的不是语法和新特性这些虚头八脑的东西,而是生态。整天嚷嚷着要取代C/C++,Java 的语言,侧面就说明了 C/C++,Java是多么的成功。Java 庞大的生态是一二十年慢慢建立起来的,Kotlin 要想取代,没个五到十年想都别想。

g
gaoxiaoyuan
回复 @yongk : 所谓生态,并不只是类库函数库。涉及的技术方向,开发人员数量,大公司接受程度,网上资料数量,从业者入门门槛等等综合起来才是生态。目前看来,C/C++ 和 Java的生态最为庞大,霸主地位难以撼动。
g
gaoxiaoyuan
回复 @shifeng1983 : Java出来的时候中国才刚接入因特网,谷歌都还没诞生,那时候谈生态有什么意义。但是现在不同了,Java已经遍布IT行业各个领域,涉及各种技术,衍生出大量优秀的库,聚集了近千万的开发者,在各大小公司打下了坚实的基础,网上无数资料,培训机构几个月出来就能干活,这就叫生态。别说Kotlin,任何一门新兴语言想挑战C/C++,Java的霸主地位都没戏。
s
shifeng1983
java刚出来的时候有什么生态?但是不看好kotlin,java17出来后没什么差距了
yongk
yongk
Kotlin能调用Java,不就是拥有Java的生态了吗?
0
bastetwang
bastetwang

兼容 Java 的语法,不像 Scala 那样另起炉灶。因此,绝大多数第三方 Java 库可以直接使用。

这句话觉得有问题啊,kotlin和java语法相差还比较大,和scala反而是比较接近,而且scala也能直接用第三方库java库。

jzdayz
jzdayz
jvm系的 java kotlin等jvm系语言理论上都可以互调,编辑器支持即可
返回顶部
顶部