Java失宠,谷歌宣布Kotlin现在是Android开发的首选语言

[复制链接]
coolcoolong 发表于 2019-5-15 01:02:59 | 显示全部楼层 |阅读模式
来源:https://www.jianshu.com/p/1a099f06bfb7
若内容不全,可点击上述链接查看来源网页,在网页中点击红色双层向下的箭头阅读全文


在今日凌晨的GoogleI/O大会上,Google官方正式宣布,Kotlin编程语言现在是Android应用程序开发人员的首选语言。Java占据Android开发绝对统治的时代一去不复返了。

Kotlin,东宫太子

谷歌今天宣布,Kotlin编程语言现在是Android应用程序开发人员的首选语言。

谷歌在今天的声明中写道:“Android的开发将越来越以Kotlin为先。”许多新的JetpackAPI和特性将首先在Kotlin中提供。如果你要开始一个新项目,你应该用Kotlin来写;用Kotlin编写通常意味着更少的代码——更少用于类型、测试和维护方面的代码。”

就在两年前的2017年I/O大会上,谷歌宣布在其AndroidStudioIDE中支持Kotlin。考虑到Java长期以来一直是Android应用程序开发的首选语言,这有点令人惊讶。在过去的两年里,Kotlin的人气只增不减。谷歌说,超过50%的专业Android开发人员现在使用该语言开发他们的应用程序,在最新的StackOverflow开发人员调查中,它被列为第四大最受欢迎的编程语言。

Android的首席倡导者切特·哈斯(ChetHaase)表示:“我们宣布,我们正在采取的下一个重大举措是,我们将以Kotlin为先。”

哈斯说:“我们知道,不是每个人现在都在用Kotlin,但是我们相信,你会需要它的。”“你可能有充分的理由继续使用C++和Java编程语言,这完全没问题。这些语言不会消失。”

Kotlin,Android世界的Swift?

早在2015年,Kotlin就有“Android世界的Swift”的称号。

Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与Java高度可互操作,可以同时用在一个项目中。

按照JetBrains的说法,根据他们多年的Java平台开发经验,他们认为Java编程语言有一定的局限性和问题,而且由于需要向后兼容,它们不可能或很难得到解决。因此,他们创建了Kotlin项目,主要目标是:

  • 创建一种兼容Java的语言
  • 编译速度至少同Java一样快
  • 比Java更安全
  • 比Java更简洁
  • 比最成熟的竞争者Scala还简单

若在当时看来,Android世界的Swift称号似乎底气不足,更像是一种美好的愿望。那么在2017、2019两届的GoogleI/O以后,这个说法可以站住脚了。

Kotlin真比Java强?

许多新语言的出现似乎都是源于对某种其它语言的厌倦,Kotlin看上去也是如此。但在JetBrains看来,Kotlin项目的原始动机就是为了提升生产力。JetBrains开发者支持组组长HadiHariri在接受InfoQ采访时表示:

”尽管当时我们已经开发了对几种基于JVM的编程语言的支持,我们还是基本都在Java环境下写基于IntelliJ的API。IntelliJ开发系统是基于Groovy和Gant的,Groovy也用于测试,RubyMine中还有一些JRuby代码,情况就是如此。我们希望转向更具表现力的语言从而提高生产力。同时,我们不能接受在Java互操作性或编译速度方面的妥协。“

Kotlin与Java总是在主观比较

“Kotlin比Java好”,“Kotlin可读性比Java强”,“Kotlin开发速度比Java快”,类似这样的陈述缺少相关准确数据的支持,所以都归为主观看法一类。

主观看法是个体开发人员在对与Kotlin或Java相关的主题作出一个或多个主观判断时形成。

开发人员的主观判断存在如下问题:

  • 没有与主观判断相关联的量化指标。
  • 主观判断存在很大的偏见。
  • 主观判断的偏见在开发人员之间存在很大的差异。

由于没有与主观判断相关联的量化指标,建立在这些判断基础上的观点只是反映出了开发人员之前就有的偏见。不同的开发人员可能有着截然不同的偏见,因此,有开发人员认为Kotlin是不错(或糟糕)的Java替代者并不意味着其他开发人员也这么认为。

而且,由于没有客观指标,主观分歧就无法客观地消除,这经常会导致“口水战”。

相较于Java,Kotlin的确在一些方面有较大优势:效率高、易维护、可靠、简单易学。在一些特定场景下,许多Java开发者因为某些方面的问题选择了切换到Kotlin:比如受够了JavaNullPointerException的人都喜欢Kotlin的Null安全特性;扩展函数被大量使用;除了扩展Java类,人们也常常将Java代码迁移到Kotlin。

根据英国软件公司Pusher的调查数据显示,在样本数2744人的调查中,超过87%的受调者已经完成了迁移。他们有的使用了迁移向导,有的直接手动修改代码。超过四分之一的受调者迁移到Kotlin后又回到了Java。有技术方面的原因,也有组织方面的原因。其中使用了反射或代码生成的工具是被提及最多的因素。

  • “Kotlin的枚举不能包含常量。在自定义注解时(比如@IntDef),为了保持接口的整洁,需要将值保存在枚举中。”

  • “我们正在使用Realm,但它不能与数据类一起使用。”

  • “我们的Java代码中使用了Retrolambda,因为类型缺失,很难转到Kotlin。”

  • “另一个团队不喜欢Kotlin,我们也预料不到会这样。”

  • “这不是我们决定的,我们是按照公司的规则来的。”

Java依旧是编程语言排行榜上的第一名。但Java是最好的语言么?不是,因为在每个领域都有更合适的编程语言。

那么,Java语言到底有什么优势可以占据排行榜第一的位置呢?

  • 其一,语法比较简单,学过计算机编程的开发者都能快速上手。

  • 其二,在若干了领域都有很强的竞争力,比如服务端编程,高性能网络程序,企业软件事务处理,分布式计算,Android移动终端应用开发等等。

  • 最重要的一点是符合工程学的需求,成为企业软件公司的首选,也受到互联网公司的青睐。

综合而言,Java语言全能方面是最好的。但同样可以看到,Android社区拥抱Kotlin的速度越来越快,也许有一天,在Android世界里,我们会看到Kotlin对Java的超越。

为什么谷歌会支持Kotlin?

免责声明:以下内容纯属基于既有事实合理推测,毫无任何实锤。

还记得谷歌与Oracle旷日持久的Java侵权案吗?这个持续时间长达8、9年的纷争目前以谷歌败诉为最新结局,其需要向Oracle赔偿88亿美元。(编者注:在过去几年时间里,几次裁决分别判两家公司胜诉或败诉。今年1月份,谷歌不服判决上诉美国最高法院做最终裁决。)

事件的起因是在2010年,作为Java拥有者的Oracle认为,谷歌在Android系统上无偿使用了37个JavaAPIs,这侵犯了他们的专利,而在Android中还有9行代码抄袭了Java,这侵犯了他们的版权。

那9行代码造成抄袭的缘由据说是因为当时谷歌的一位工程师在为Android项目工作的同时,又为Sun公司的OpenJDK效力,后来,该工程师直接从OpenJDK中复制了9行代码到Android中,由于Google没有得到Sun公司的授权,所以Oracle收购Sun之后,Java易主,这就相当于侵犯了Oracle的版权。

而对于那37个JavaAPIs,双方各执己见,谷歌认为API不应受版权保护,而Oracle则认为谷歌对其的使用具有很强的商业性,再加上用Java写的Android代码无法在JVM上运行,这对Java语言是一种分裂,同时Oracle认为,Android通过不当使用JavaAPI挤占了JavaME可能的市场,这是它巨额索赔的根基。

2016年初,Google发言人表示,AndroidN(7.0)不再沿用现有的JavaAPIs内容,而是迁移至基于OpenJDK的方法,为开发者创建一个通用代码库。虽然没法规避JavaAPIs官司,但至少可以减少潜在的可能纠纷。

到了2017年的GoogleI/O大会,Google宣布Kotlin成为Android开发的一级语言,可以说对Kotlin寄予了厚望。此后,Kotlin也被开发者视为Java的替代品。

在之后的一年时间里,Google可以说把Kotlin当亲儿子看待,为什么这么说呢?让我们来梳理这一年Google为Kotlin做了什么:

  • 2017年11月,AndroidStudio3.0正式开放下载,此版本的AndroidStudio将Kotlin语言支持集成到IDE中,在此版本上,代码自动完成和语法突出显示都可以在此版本上平稳运行,今年4月推出的AndroidStudio3.1为Kotlin代码提供了更好的Lint支持,并通过为AndroidEmulator添加QuickBoot功能加快了测试速度。

  • 2018年2月,Google推出预览版本的AndroidKTX,AndroidKTX是一组扩展程序,它在Android框架和支持库上提供了一个良好的API层,使Kotlin代码更加简洁。

  • 在GoogleI/O2018上,Google发布了AndroidJetpack,它是下一代的Android组件,它将支持库向后兼容和立即更新的优点融合到更多组件中,提高开发速率和质量,不仅如此,AndroidJetpack将全面兼容Kotlin,而且它还能利用AndroidKTX使得Kotlin代码更加简洁。

这些都是Google逐渐向Kotlin靠拢的证据,虽然还不至于让Kotlin完全取代Java,但不难看出Google的“偏心”。事实上,Kotlin自己也非常争气:2017年11月,在第一届Kotlin专题大会KotlinConf上,Kotlin首席设计师AndreyBreslav宣布Kotlin将支持iOS开发和Web开发,这意味着Kotlin向全平台开发迈出了重要的一步。

Kotlin目前正处于发展的初始阶段,还有很多成长的空间。Google现在是把它当成Android黄昏时期的救命稻草,它能与Java100%互通,但它存在的目的并不是为了取代Java,只是为了让开发者有多种选择。虽说编程语言只是软件实现的一种工具,开发者无论选择哪种语言都没有绝对的对与错。但在互联网时代,开发者应该懂得审时度势,拥抱变化,才能走得更远。

小结

本人Java开发4年Android开发5年,定期分享Android高级技术及经验分享,欢迎大家关注~(分享内容包括不限于高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!)

最后文末放上一个技术交流群:AndroidIOC架构设计

群内有许多技术大牛,有任何问题,欢迎广大网友一起来交流,群内还不定期免费分享高阶Android学习视频资料和面试资料包~

再推荐一篇文章:“寒冬未过”,阿里P9架构分享Android必备技术点,让你offer拿到手软!