Kotlin对Scala(VS Java)

Kotlin vs. Scala (vs. Java)

自Kotlin的出现和成熟以来,基于JVM的语言面临着巨大的挑战,尤其是Scala。 您现在肯定已经听说了很多有关Kotlin的信息,尤其是它给Java表带来的好处和待遇。 但是接着是Scala,这是一种功能强大且简洁的Java替代方案。 scalavsKotlin? 哪个更好?或者是Kotlin与Java或Java与Scala-

Scala和Kotlin旨在以自己的不同方式改进Java。

对于打算从Java迁移到Kotlin或Scala(无法想象的相反方向)的那些人,我将介绍"什么是"方案,以便您可以自己做出更好的决定。

让我们先来看一下Kotlin。

Kotlin

Kotlin由JetBrains开发,并于2012年2月以开源语言进入市场。 到目前为止,Kotlin已有两个发行版本,其中Kotlin 1.2是最稳定的版本,于2017年11月28日发行。

该语言由于与Java 6的完美兼容性而在Android上变得越来越流行,Java 6主要是Android上的Java当前版本。 不仅如此,Kotlin提供了一些仅在Java 8中提供的功能,因此Java 6上的Android开发人员无法使用。

在充满"关于Kotlin的一切都好"的壁橱中,Kotlin的两个最突出的特征是与Java的无缝无缝连接。 您可以从Kotlin调用Java代码,反之亦然,而无需打扰或皱眉,更不用说内置的null安全功能了。 没有看到NullPointerException是每个Android程序员的梦想。

Android应用程序开发已完全转变为幸福的非NPE体验。 如果您想了解有关零安全性工作原理的详细信息,请在此处查看。

这也是Google在Android上采用Kotlin作为官方支持语言的"原因"之一。

除此之外,请看一下Kotlin提供的一些优势。

优势

功能编程方法+ OOP样式

任何Java竞争对手都必须是FP语言。 Kotlin在种类繁多的类型和类型安全性方面缺少一点,但是尽管如此,它还是使用FP方法提供了OOP风格语言的所有功能。

高阶功能

Kotlin保留了高阶函数的便利性。 如果您不知道,则高阶函数就是将函数作为参数并返回类型的函数。 锁定功能是最经典的高阶功能示例之一:

1
2
3
4
5
6
7
8
fun <T> lock(lock: Lock, body: () - > T): T {
    lock.lock()
    try {
        return body()
    } finally {
        lock.unlock()
    }
}

简洁,干净和无表情的表达方式

这是我最喜欢的部分。 Java很棒,但是它使您编写的样板代码令人沮丧且容易出错。 Kotlin中的编码非常简短,简明扼要。 比用Java更少的代码行来完成工作。 编写的次数越少,出错和暴露给错误的次数就越少。 每个人都知道,对,

Kotlin减少代码量的一种方法是限制使用findViewById。

Kotlin允许从布局XML访问视图,就像属性一样。 不必每次都使用findViewById,而是要做的就是遵循此示例。

假设您在XML布局中定义了一个文本视图,如下所示:

1
2
3
4
5
6
<TextView
    android:id="@+id/welcomeMessage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="Hello World!"/>

要访问它,您所需要做的就是转到您的主要活动并输入:

1
2
3
4
5
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    welcomeMessage.text ="Hello Kotlin!"
}

由JetBrains和Google支持

尽管Kotlin是比Scala更为年轻的语言,但它得到了两家伟大公司的支持:强大的Google和令人惊叹的JetBrains,它们负责许多其他IDE,包括Android的IntelliJ IDE。 因此,毫无疑问,那里提供了强大的工具支持。 对于所有认为Kotlin是某种趋势的人们,您再也不会错了。

Kotlin已经在Android上使用,并且肯定会持续存在,发展壮大。

弱点

但是,随着实力的增强,也会带来一些劣势。

较弱的模式匹配

模式匹配在Kotlin中不强。 它不完全支持它。

如果您想做类似...

1
2
3
4
person match {
   case Person("bobby", age) =>
   case _ =>
}

...那不是 但这不是皱眉。 您仍然可以通过智能地使用whenclause来完成非常好的模式匹配工作。 但是我们都知道,智力比普通的乔需要更多的精力和技能。

额外的运行时大小

如果您的应用程序已经很长,那么800KB的额外运行时大小可能会给您带来麻烦。 由于应用程序较大,因此下载量可能会减少。

代码的初始可读性

没有什么是永远美好的。 使用Kotlin提供的简洁方法,存在一个小问题。 这么多的事情用很少的代码完成,一开始它变得有点难以阅读和理解。 初学者甚至可能会觉得不知所措。

缺乏官方支持

尽管Google已与JetBrains携手为Kotlin提供支持,但了解Google不认可它是至关重要的。 即使在Android中使用Kotlin,自动更正的速度也比Java慢。

较小的支持社区

正如我已经提到的,Kotlin比Scala还要年轻,而且不用说Java。

由于Kotlin比Scala还要年轻,因此它的库,博客文章和教程更少。

在线支持社区很小。 缺少博客文章,教程和用户文档可能会成为您的问题,但正如趋势所暗示的那样,随着越来越多的人和公司采用Kotlin,这一问题可能很快就会被填补。

在下定决心之前,让我们跳到Scala。

Scala

Scala于2004年浮出水面。由Martin Odersky开发的Scala作为通用编程语言在Java平台上发布。 Scala这个名字不是什么异想天开的概念,它是" scalable"(可扩展)的缩写:一种可根据用户需求进行扩展的语言。

果然在2004年发布,Scala的优势在于可以随着时间的推移而成熟,并成为Kotlin的关注焦点。

Scala具有Kotlin的一些共同特征,例如代码简洁,高阶函数,具有OOP风格的FP功能以及与Java的互操作性(尽管不如Kotlin更好)。 除此之外,这就是Scala的含义。

优势

完全支持模式匹配,宏和高级类型

Scala中的模式匹配不是开玩笑。 为此,Scala使用match语句,它是Java的switch语句的强大版本。 它允许您匹配任何类型的数据,列表,甚至您自己的类型。 如果您还没有尝试过,建议您稍微尝试一下。

编写一次,随处运行

Scala有点复杂,但是它具有非常灵活的代码语法。 熟练使用功能编程功能使代码可扩展和分层至最佳水平。

更大的社区支持

Scala在这里已经有十多年了。 由于它是功能强大的Java替代方案,因此它具有庞大的支持社区。 我们正在谈论YouTube教程,博客文章,论坛,并且别忘了官方支持和用户文档。 任何您发现自己在挣扎中的事情,您都可以找到答案。

操作员超载

Scala不会限制您不要重载运算符。 您可以玩看似操作员的功能并进行无限定义。 但是您需要小心使用此功能。 但是,如果您可以正确执行此操作,则代码的可读性将会提高。 如果不是这样,您可能最终会使代码难以理解。

弱点

编译缓慢

一切都与编码世界中的速度有关。 缓慢的程序是一个很大的障碍。 当涉及到工业级项目时,与Kotlin相比,Scala的编译时间只有几分钟,而Kotlin的编译时间却与Java一样快,后者只需几秒钟。

二进制编译面临挑战

Scala与某些版本不是二进制兼容的。 假设您使用Scala 2.1进行了编译。 Scala 2.11不会编译相同的文件。

如果您必须跨不同的版本工作并进行更新,那可能什么都不是,或者这可能是您最大的噩梦。 特别是如果您具有生产规模的项目。

对无效安全性的管理效率较低

Scala尝试在管理null安全性方面做得很好,但是效果并不理想。 等同于null安全性的Scala是Option关键字。 使用此功能,您很有可能会在后门安装NPE。

外卖

scala(Scala)和Kotlin(Kotlin)处于拉锯战。 Scala在某些方面比Kotlin更具优势,但Kotlin在其他方面同样强大。 两种语言的主要区别是,Kotlin更像是Java的更好版本,而Scala是完全不同的Java,可以这么说。

尽管Scala有一些学习曲线,但它为高级功能编程提供了无与伦比的支持。 另一方面,Kotlin超级易学且编写代码非常有趣。

但这是否意味着Java出了点问题? 我的意思是为什么首先要从Java进行更改-

我会告诉你为什么

Java很老了。 真的很老 像,曾祖父。 尽管很受欢迎,但它的受欢迎程度实际上与之相反。 Java的使用无处不在,这使使用Java的团队无法更改其基础,即使知道Java也面临着许多技术批评。

不管多么伟大,Java都有太多的冗余和冗长的样板代码。 Kotlin和Scala恰好在Java的预期目标上做得更好。

结论

选择语言主要取决于您所需的用途。 Scala非常适合需要混合功能和OOP风格编程语言的项目。 对于需要处理大量数据或依赖数学的复杂建模的地方,Scala是最佳选择。

但是,如果您只是想让Java减少挫败感,但仍然是Java,那么再没有比Kotlin更好的了。 使用Kotlin进行Android应用开发将是您经历过的最好的事情。 Kotlin就像一个Java堂兄,具有更好的外观,并且不会胡言乱语。 因此,请明智选择,并让代码强制与您同在。