【51CTO.com快译】还记得多年前有关Android与iOS孰优孰劣的辩论吗?如今,Kotlin与Java的争论,时常广泛地发生在开发人员之中。不过,由于大家往往关注的是Java所不具备的Kotlin功能,因此他们的结论可能略显偏颇。下面,我将从资深应用开发人员的角度,综合比较Kotlin与Java在不同领域的优缺点,以方便您做出判断和选择。

首先,我们来简单了解一下这两种语言。

Kotlin:简介

由JetBrain推出的Kotlin,旨在提高Java的生产率。它是一种静态类型的语言,可用于JavaScript,以及Java虚拟机(JVM)中。由于Google在2019年宣布将其选为首选开发语言,因此Kotlin的流行度得以大幅提升。

使用Kotlin开发的流行应用包括:

  • Trello

  • Evernote

  • Coursera

  • Pinterest

  • Uber

目前,有许多行业巨头企业正在考虑从Java或其他语言迁移到Kotlin。

Kotlin的常见问题与解答

相比Java,Kotlin是一种较新的语言,因此许多初学者(甚至一些专业开发人员)经常围绕着它,提出各种问题。下面便是一些常见的问题与解答。

我应该在上手Kotlin之前学习Java吗?

如果您是一位经验丰富的开发人员,并且掌握着与移动应用开发相关的基础知识,那么您可能无需成为Java专家,便可以开始学习Kotlin。但是,如果您不太熟悉移动应用的开发,那么在上手Kotlin之前,最好通过学习Java来打下基础。

我可以使用Kotlin进行Web开发吗?

Kotlin是一个全栈式的解决方案,因此它也可以被用于Web开发。在服务器上,您不但可以将Kotlin用在前端,也可以在后端使用它。

Kotlin和Java是否一回事?

Kotlin和Java在某些方面的确有着相似之处,但它们在速度和性能方面截然不同。

Java:简介

Java是由Sun Microsystems(后被Oracle收购了)于1995年发布的,一种面向对象的编程语言。目前,大部分Android应用,以及Android系统本身都是基于Java的。这正是其成为所有Android应用开发人员优先选择的原因。此外,由于Java的大多数元素都是开源的,因此,它很容易被用来进行程序开发。

使用Java开发的流行应用包括:

  • Spotify

  • NASA WorldWind

  • Signal

  • CashApp

  • Minecraft

下面,让我们基于各项功能特性,来了解Kotlin和Java之间的区别。

编写代码的速度

Kotlin的主要优势之一在于简洁。在与Java同等实现最终目标的前提下,您可以用Kotlin更快地编写出更少量的代码,进而快速完成任务。

不过,在使用Kotlin时,您可能需要花费更多的时间,去全面考虑解决方案。而使用Java则不需花费过多的时间去准备方案。因此,您需要自行判断,到底是要节省“磨刀功”、还是“砍柴功”了。

性能与功能

由于两种语言都可以编译出能够在JVM上运行的字节码(ByteCode),因此我们无法直接比较它们的内存使用情况。下面,让我们来看看Kotlin与Java在性能与功能上的不同:

  • Java提供了异常检查的功能,Kotlin则不然。

  • Kotlin具有协程(Coroutines,可以帮助编写异步代码),Java则没有。

  • Kotlin提供了扩展功能。

  • Kotlin内置了高阶函数(Higher-order functions)和Lambda,因此开发者不必去处理Retrolambdas插件。在Java中,您将必须通过可调用函数,来实现高阶函数。同时,Java在其第8版本中引入了Lambda。

  • Kotlin为委派提供了原生支持,并具有内联函数(inline functions)。

  • Java具有非私有字段(non-private fields)和NullPointerExceptions,Kotlin则不然。

  • Kotlin没有像Java那样的静态成员,但是它提供了替代对象。

  • Kotlin具有null safe特性。

  • Kotlin具有smart casts,Java则没有。

总体而言,Kotlin虽然不及Java功能丰富,但是它在开发Android应用性能方面比较占优。

稳定性

由于相对较新,因此Kotlin没有长期支持的版本。而Java有着Java 8和Java 11之类的长期支持版本。这就意味着,如果这些版本出现了问题,其原始开发者将会使用补丁程序,对其进行修复。

可见,Java在稳定性上胜出。当然,Kotlin并不能因此被称为不稳定的编程语言。

文档资料

Oracle提供了充足的Java官方文档,可供您学习与研究。此外,由于有着长时间的积累,您可以很容易地找到Java的相关教程、书籍和指南。

作为相对年轻的语言,Kotlin当然也有着不错的官方文档。不过,您需要通过深挖,才能找到更多的资源。

社区

作为一种古老的语言,Java比Kotlin拥有更广泛的开发者社区。不过有调查表明(https://insights.stackoverflow.com/survey/2020#top-paying-technologies),业界有62.9%的开发者喜欢Kotlin,而只有44.1%的开发者表示他们喜欢Java。

因此,您可以放心地使用这两种语言。如果碰到任何与语言有关的问题,您都可以从各个的社区,快速地获得在线支持与解决方案。

易于学习

由于Kotlin比Java更需要编程基础,因此Java更易于学习和实现。当然,如果您更善于抽象思想,那么学习Kotlin就不是什么问题了。

编译速度

测试表明:在使用Gradle(译者注:是一个基于Apache Ant和Apache Maven概念的,项目自动化构建开源工具)守护程序进行纯净(clean)构建时,Java的编译速度比Kotlin快17%;而随着Gradle守护进程的持续运行,Java最终的编译速度比Kotlin快13%。

当然,纯净构建在真实编码实践中极其少见,大多数开发人员都会用到增量(incremental)构建。下面是在对Gradle守护程序进行了两至三次持续运行后,不同类型的增量构建在编译速度上的比较结果:

  • 不作任何更改 - Java(4.6秒),Kotlin(4.5秒)。

  • 更改某个未被其他用户使用的文件 - Java(7秒),Kotlin(6.1秒)。

  • 更改项目中由其他文件导入的文件 - Java(7.1秒),Kotlin(6秒)。

由上述结果可知,Java的纯净构建速度更快;而Kotlin在增量构建时更快。

小结

综合上述比较,我们不难看出:对于资深Java程序员而言,从自己熟悉的语言切换到另一种新的语言,其意义不大。而对于初学者而言,Kotlin的学习曲线则更为陡峭。当然,Kotlin的如下两个主要优势,可能会成为企业在项目中使用它的驱动原因:

  • Kotlin能够大幅减少应用开发的用时。

  • Kotlin可以减少应用崩溃的可能性。

基于Kotlin的上述优势,如果企业需要在Android开发领域保持竞争优势的话,就会趋向选择Kotlin,而不是Java。那么企业内部的开发人员也就会顺应此趋势,开始学习Kotlin,这种面向未来的语言。

原文标题:Kotlin vs. Java in Android App Development,作者: Anand Mahajan

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】