【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】