专栏名称: InfoQ
有内容的技术社区媒体。
目录
相关文章推荐
36氪  ·  山姆在中国,只用了这几招 ·  2 天前  
品质人生质量开讲  ·  专访任正非:干就完了。芯片没必要担心,软件也 ... ·  2 天前  
51好读  ›  专栏  ›  InfoQ

Kotlin与Java的主客观比较,各自胜场几何?

InfoQ  · 公众号  · 科技媒体  · 2017-10-08 09:00

正文

请到「今天看啥」查看全文


我们也可以把这个例子扩展到自然语言。我了解三门截然不同的语言。虽然它们之间差别很大,但我发现,当我不理解文本中使用的单词时,阅读任何一种语言的文本都非常困难。一旦我认识构成文本的单词并熟悉上下文——无论它使用了哪一种语言,我读起来都不困难。

因此,对我而言,语言的选择并不会影响可读性,只要理解内容和上下文就可以了。

编程语言同样如此。

当我们开始使用一门新语言,我们会有一段时间很难理解源代码,需要认真领会每个句法结构。但是,随着我们阅读和编写特定语言的代码越来越多,我们逐渐就熟悉了那门语言的语法,到某个时候,我们就不会再注意句法结构了。

我自己在多门语言上有过这种体验:Verilog、Bash、Perl、Tcl、Lisp、Java。

根据我使用上述语言的经验,我可以告诉你:如果一个人适应了 Lisp 的代码,并且不会再注意到小括号,那么跟 Java 比起来,Kotlin 的语法完全不能对可读性产生不可忽视的影响,即使它“更好”。

既然我们在讨论这个话题,我就分享下自己对于影响源代码可读性因素的主观判断。

在读过其他开发人员使用许多语言编写的代码后(上面只罗列了我在某个阶段精通的语言;我用过的所有语言比这个多),我得出如下结论:如果开发人员使用某一门语言可以编写出可读性和可理解性都很好的代码,那么他们通常也可以使用其他语言编写出可读性和可理解性都很好的代码。

因此,我根据自己的经验作出的主观判断是,源代码的可读性和选择的语言无关,那取决于代码编写者的技能和读者的技能(编写者的技能更重要)。

如果你仍然认为主观看法具有代表性,那么至少阅读并思考下 Robert “Uncle Bob” Martin 在这篇博文中的观点。

Kotlin 与 Java 的客观比较

与主观比较相反,客观比较使用量化指标来度量或评估 Kotlin 比 Java 有优势的地方。

用一套标准客观地证明一门编程语言是否强过另一门,这种想法非常有吸引力,但是有个问题:据我所知,没有与编程语言相关的通用客观指标。

考虑到我们无法进行精确的直接比较,那我们能否客观地比较 Kotlin 和 Java 呢?能!我们仍然能评估从 Java 切换到 Kotlin 所带来的积极和消息影响的程度,然后比较结果,并讨论它们的影响。

为了评估 Kotlin 所能带来的最好结果,我们将做如下假设:

  1. 开发人员可以立即切换到 Kotlin;

  2. 切换到 Kotlin 后,开发人员不会损失任何技能(例如,有两年 Java 开发经验的开发人员可以神奇地获得两年的 Kotlin 开发经验);

  3. Kotlin 和 Java 一样稳定;

  4. Kotlin 工具和 Java 工具一样成熟。

事实上,上述假设没有一个是合理的,但在开始的时候,有一个理想化的设定便于说明。然后,我们会抛开这些假设,讨论真实世界的效应所带来的影响。

Kotlin 最佳结果估计

遵循 Steve McConnell 在 Code Complete 一书中提出的模式,我们可以将软件构建活动分解成三个子活动:详细设计、编码与调试、开发测试。

Kotlin 对于详细设计子活动没什么影响(这项活动通常独立于选用的特定的面向对象编程语言),因此,在这一部分,Kotlin 和 Java 需要付出同样的努力。

据我所知,对于开发测试子活动,Kotlin 也没有提出什么革命性的东西。因此,开发测试需要付出的努力也一样。

就剩编码与调试子活动了。

如果我们用 Kotlin 替换 Java,那么我在编码与调试活动中可以节省多少工作量?这个问题很难回答,不同程序员之间这一数值会有很大差异(有些程序员使用 Java 更高效)。不过,既然我们在评估最好的情况,我们不妨假设从 Java 切换到 Kotlin 可以将开发人员在编码与调试阶段的生产力平均提高 10%。







请到「今天看啥」查看全文