作家
登录

Kotlin与Java之争 究竟谁更好?

作者: 来源: 2017-09-22 13:06:50 阅读 我要评论

有个广泛的说法,就是 Kotlin 是一学临盆就绪的说话。这种说法也许是有事理的,因为 Kotlin 已经用在了若干项目里。

应用一门特定的编程说话高效工作的才能是一项技能。

不过,与 Java 比拟,Kotlin 是一门并不稳定的年青说话。

在这句话中,“更好的语法”又是一个主不雅断定,本身就值得商讨,但为了避免争辩,我们假设 Kotlin 的语法确切更好。然则,这就能解释 Kotlin 的可读性更强吗?

有些开辟人员认为,Kotlin 的不稳定性是个优势——说话在演进,可以更快地供给新特点,更快地改进。在我看来,他们对于这件事的看法过于简单。

下面是 Kotlin 1.1.4 宣布解释里的第一句话(写这篇文┞仿时的最新版本):

  • 修复 IntelliJ IDEA 的一项重大年夜机能阑珊
  • ——Kotlin 1.1.4 宣布解释

我不知道这是什么样的阑珊,有若干项目受到了影响,但我的大年夜脑主动将“重大年夜机能阑珊”这个搭配翻译成了“浪费了很多小时的开辟时光。”

此外,如不雅你读一遍宣布解释的评论,你就会留意到,很多人碰到了迁徙问题。在 1.1.2 版本的评论里,甚至有人指出,这个“补丁”宣布惹人了破坏性(向后不兼容)的修改。

比拟之下,如不雅你读一遍 Oracle JDK8 的宣布解释 ,你就会发明,它比较稳定。大年夜多半修改都是安然改进方面的。

是以,与 Java 比拟,Kotlin 是一门不稳定且不成熟的说话——迁徙到 Kotlin 会对项目产生如何的影响?为了答复这个问题,我将应用来自 Cocomo 2 评估模型的“平台波动性”工作因子:

平台波动性(PVOL)

这里应用“平台”一词指代软件产品履行义务时调用的复杂硬件和软件(OS、DBMS 等)。如不雅开辟的软件是一个操作体系,那么婢歙就是计算机硬件。如不雅开辟的是数据库治理体系,那么婢歙就是硬件和操作体系。如不雅开辟的是收集文本浏览器,那么婢歙就是收集、计算机硬件、操作体系和分布式信息库。平台包含支撑软件体系开辟所需的编译器或装配器。如下表所示,如不雅平台每 12 个月才有一次重大年夜变革,则评级就会很低,如不雅每 2 周有一次重大年夜变革,则评级就会很高:

Kotlin与Java之争 毕竟谁更好?

Cocomo 2 模型定义手册

你可能已经留意到,编程说话并没有直接涌如今该工作因子的描述里,但出现了编译器和装配器。在我看来,这段描述没有显式包含编程说话,是因为得出 Cocomo 2 模型的所有项目都应用了稳定的说话。

因为编译器和装配器属于这个工作因子,所以我们也可以揣摸出编程说话及相干对象。

根据平台波动性的┞封种评级范围,Java 的评级应当是“very low”,而 Kotlin 的评级应当是“low”或更高。Kotlin 的评级可能会更高,因为它内部依附于其它对象,增长了出现兼容性问题的风险。

因为“very low”没有供给工作因子,所以我们须要估计。

基于这些假设(有利于 Kotlin),如不雅一个项目须要 5 人年的额定工作量,那么应用 Kotlin,工作量就变成了 1044 人天,而应用 Java 的总工作量是 984 人天。

是以,我根据本身的经验作出的主不雅断定是,源代码的可读性和选择的说话无关,那取决于代码编写者的技能和读者的技能(编写者的技能更重要)。

选择应用 Kotlin 而不是 Java 实现如许一个项目会使总工作量增长 60 人天。

看下该因子大年夜“very high”到“low”的评分递减规律,我认为,我们可以宁神的假设,“very low”的评分不高于 0.82。

说话和对象不稳定所导致的额外工作是切换到 Kotlin 所缩减的工作的 2 倍多。

综合所怀孕分

我当成例祖菀爬论辩论的项目须要 5 人年的额定工作量。

根据上述评估,如不雅该项目由平均具备 1 年 Java 开辟经验的开辟人员应用 Java 实现,则总工作量为:

  • 人-年 * LTEX(Java) * PVOL(Java) = 984 (人-天) 

如不雅同样的项目由几乎没有 Kotlin 开辟经验的开辟人员应用 Kotlin 实现,则总工作量为

  • 5 人-年 * LTEX(Kotlin) * PVOL(Kotlin) * 0.98 + T_ramp_up = 1115 + 5 * N_developers (人-天) 

评估留意事项

在评估评论辩论的过程中,我们得出了与 Kotlin 和 Java 相干的、便利的工作量单点值。

Kotlin 与 Java 的主不雅比较

但实际上,单点值根本不是估计——它们只是猜测。真正的估计必须有一个相接洽关系的不肯定性。换句话说,估计表示可能性典范围,而不是单点值。

我们最终应用单点值代替了范围,那是因为我大年夜估算范围里选择了最有利于 Kotlin 的值,将所有的估计都转换成了单点值。

例如,当评论辩论 Kotlin 对编码与调试晃荡的影响时,我大年夜估计出的可能性范围 [-5%,10%] 中选择了最大年夜的临盆力晋升值 10%。在其他情况下,当我们评论辩论开辟人员切换到 Kotlin 的平均时光时,我大年夜估计的可能性范围 [5 天,21 天] 中选择了最小的 5 天。

此外,我们应用了 Cocomo 2 估计模型专用的工作因子。这些因子并不是放之四海而皆准的┞锋理,在最一般的情况下,应当也有相接洽关系的不肯定性。我赋给 Kotlin 的评级高于我实际上认为它应得的评级,我欲望经由过程这种方法清除这种不肯定性。

不消说,我们获得的单点值并不是百分百精确。为了得出更完全的估计,我们可以应用真正的估计进行 Monte Carlo 仿真。经由过程这项技巧,我们可以不雅察可能结不雅的分布,弄清跋扈哪种结不雅最可能出现。


  推荐阅读

  显卡PCI/AGP/PCI-E接口啥区别?看完秒懂

【沙龙】51CTO诚邀您9月23号和多位技巧大年夜咖一路聊智能CDN的优化之路,抓紧时光哦! PCI-E接口是主板上比较通用的一种接口标准,今朝重要供给给须要直接与CPU进行通信的设备应用,平日是>>>详细阅读


本文标题:Kotlin与Java之争 究竟谁更好?

地址:http://www.17bianji.com/lsqh/37586.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)