文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

一款你从来没听说过的语言

Kotlin 是一款新的编程语言,来自 JetBrains,世界上最好的 IDE 制造商。在经过大量搜索之后,我把它作为可能会在未来 5-10 年使用的一款编程语言。

我喜欢 Kotlin,同时认为它是一个非常成功的项目。有人看到我在开源工作中使用它,便要求我写一些关于它的东西,所以在这篇文章中我会解释为什么我认为 Kotlin 好。不过如果你马上使用它,就可能会遇到一些大大小小的问题,稍后我就会提到这些问题。最后,我认为你得考虑目前 Kotlin 使用的场景,JVM,是不是适合你(比如,你目前正在使用 Go 或者 Node)。

第 1 段(可获 1.79 积分)

Kotlin 为什么好

首先,本文看起来可能比较奇怪:通常介绍语言的文章都会列出一堆很酷的语言特性,但本文没有;我们会要晚一些提到这个主题。

我会从其它事情开始,因为如果开发者想需要评估编程语言的话,2013 年的一项研究表明,与生态系统相比,语言特性就是件小事。这也符合我自己的经验,所以,继续:

Kotlin 会编译成 JVM 字节码或 JavaScript。它不是你要用来写内核的语言。目前来看使用 Java 的人对它最感兴趣,虽然它可能会吸引所有使用垃圾回收运行时的程序员,包括使用 Scala、Go、Python、Ruby 和 JavaScript 的程序员。

第 2 段(可获 1.61 积分)

Kotlin 来自产业界,而不是学术界。它解决了当今程序员工作中面对的问题。比如,类型系统可以帮助避免空指针异常。以根本不需要 null 为目的进行研究的语言,对工作在大型代码库和 API 的人来说根本没什么用。

采用 Kotlin 不会有什么成本!它确实开源,但这并不是我想说的。我想说它有一个高质量的工具,可以将 Java 一键转换为 Kotlin,同时还强烈关注 Java 二进制兼容性。你可以转换任何一个已经存在的 Java 项目中的某个文件,所有编译都不会出问题,甚至对于数百万行的复杂程序来说也是如此。因此我采用了 Kotlin 并期望多数开发者也这样做。

第 3 段(可获 1.73 积分)

简单地说,Kotlin 程序可以使用所有已经存在的 Java 框架和库,甚至包括大量使用注解来进行处理的高级框架。它们之间相互调用不需要任何包装层或者适配层。它融合了 Maven、Gradle 和其它构建系统。

它易学易用,只需要花上几个小时看看语言参考就能学会。它的语法简洁直观。Kotlin 看起来很像 Scala,但更简单。这个语言在简洁性和可读性之间找到了非常好的平衡点。

它并不推行特定的编程概念,比如函数式风格或者OOP风格。

第 4 段(可获 1.25 积分)

没有强加任何运行时开销。标准库小而精干:它主要是由 Java 标准库的集中扩展组成。编辑器重度内联意味着对于功能性的结构,相同的代码会像 map/filter/reduce 管道一样编译为更精减的版本。

结合 Anko 和 Kovenant 这类框架的表现来看,Kotlin 正开始成为在 Android 开发者中越来越流行的工具。如果你正在进行  Android 相关的工作,你很快就会在一家好公司工作。你可以去读读 a report written by a developer at Square (一篇 Square 开发者写的报告),里面提到了对 Kotlin 和 Android 的体验。

第 5 段(可获 1.26 积分)

Kotlin 允许你继续使用目前你用来提高开发效率的工具。如果你在使用 InteliJ,IDE 互操作性毫无二致:代码中可以使用重构、搜索、导航和自动完成等,这些方面你感觉不到 Kotlin 和 Java 的差异,反之亦然。它也完全支持高度、单元测试、分析等。

除了 Android,我认为 Kotlin 非常适合企业的 Java 商店。如果你所有时间都工作在大型的 Java 代码库中,甚至在更大的公司里,你就有必须调研一下 Kotlin,因为:

  • 它有来自其成立公司的强大商业支持。JetBrains 致力于这个项目,有一个大型的高素质团队工作在这个项目中,它还有稳定的商业模式,甚至会将他们自己的旗舰产品的部分拿过来用。Kotlin 在任何时间都不可能被很快废弃。
  • 采用 Kotlin 风险低:可以让一两个有兴趣的团队成员在某个小小的部分上尝试 Kotlin,它不会破解你项目的其余部分:Kotlin 的类导出为 Java API 之后,看起来和和 Java 代码导出的没什么两样。
  • 因为 Kotlin 关注具有可读性的语法,代码审查就不会有问题:团队中不熟悉这个语言的成员都可以进行审查。
  • 它的生产目标是 Java 6,所以即使开发的东西很难升级到更新的 JVM,也可以使用 Kotlin。
第 6 段(可获 2.81 积分)

今年早些时间,我在 Swiss Re,一个大型的再保险公司,向 Java 和 .NET 架构师介绍了 Kotlin。我从定义一个简单的 Java 类开始,这个类包括一些字段、toString、equals、hashCode 等,大约写了 50 行代码。同地我们也将它转换成了 Kotlin (基本上是自动的),它已经缩减到只有一行代码。然后我还演示了一些其它节省时间的特性。他们热情高涨,并表示这对于他们自己项目中的 C# 来说,是一个潜在的强大竞争对手。

我认识 Kotlin 击中了企业中 Java 开发者们的痛点,所以即使 Kotlin 是免费的,我也期望 JetBrains 能通过他们商业版本的 IDE 增加点销售收入,这会刺激他们根据客户的意愿不断地完善这个产品。

第 7 段(可获 1.73 积分)

与许多其它语言的开发人员对比就会发现,他们多是由无关的产品资助的,也就是说,如果用户的需求与其本身意愿发生冲突的时候,他们几乎没有理由去响应客户需求。

特性

Kotlin 在一大片新编辑语言中脱颖而出,因为它注重生态系统:JetBrains 明白便捷的语法是生产力的源泉。

如此,Kotlin 拥有大量有用的特性,让编写代码成为一件愉悦的事情:

  • 我们已经提到了空安全(可选),它会让编译系统标记潜在的空指针引用。与某些语言不同,这不会牵扯到选项类型,因此是零开销。其它语言特性会确保它不会产生不便。
  • 精炼的语法:类型推导随处可见,线性函数只需要写一行,简单的结构/JavaBean 也只需要一行就能完成。真正的属性 会为幕后的 Java 产生 getFoo/setFoo 方法。函数可以脱离类而存在。
  • 不需要检查异常
  • 向类添加数据注解可以触发自动生成样板,像 equals、hashCode、toString、copy 方法以及支持变量展开(解析)。这样不需要 Builder 就可以生成不可变类。
  • 如果你要构建复杂的结构,聪明的语言特性集可以生成干净和类型安全的 Builder (参阅:自动完成)。如果你使用 Google Protocol Buffers 来存储结构化数据, 也很容易
  • 支持函数式编程零开销 Lambda、映射能力、折叠等基于 标准 Java 集合的功能对此进行支持。Kitlin 类型系统能够辨别基于集合的可变视图和不可变视图。
  • 扩展函数可以不修改源码就能为类添加方法。表面上看来它就是避免类似 FooUtils 这种类的语法糖。然后你会意识到这种方式让你很容易通过自动完成发现新方法,让你建立强大的语言扩展,可以整合现有的 Java API 和其它的 Kotlin 特性,像……
  • 重载运算符。优点:没有 Scala / Perl 风格线干扰。运算符映射到指定的方法名称,可以覆盖已经存在的运算符行为(包括函数调用),但你不能完全定义新的运算符。这是为了在能力和可读性之间达到平衡。
  • Kotlin 没有宏或其它方式来重新定义语言,但有一系列精心设计的特性使库像是语言扩展而不是对象集合。举个例子:你喜欢使用 fibers、actors,和 Go 网络的频道吗?有个叫 Quasar 的库涵盖了这些内容。
  • API 文档中使用 Markdown 代替 HTML。这使得写 JavaDoc 变得愉快。“Dokka”是一个与 JavaDoc 差不多的工具,它能读取 Kotlin 和 Java 的源代码,并合并生成文档网站。可以使用它自己的样式,也呆以使用  JavaDoc HTML 样式。
  • 更好的 泛型。如果你从来没有精确掌握类型变量中的 super 和 extends,没关系:这不是你的问题。Java 的泛型实在混乱不堪。Kotlin 把它变得更好。
  • 自动实现 委托 (转发方法)。
  • == 运算符做你真正期望的事情。
  • 你想快速、便捷的异步编程吗?当然,这里有你想要的。
  • 字符串插值 “works like ${this.example}!”
  • 函数参数可以命名、可选、可变长度。
  • 还有很多很多其它的调整和改进。如果你有什么关于 Java 的烦恼,我相信 50 个中有 50 个已经在 Kotlin 中处理掉了。
第 8 段(可获 7.2 积分)

马上体验

和很多现代编程语言一样,Kotlin 可以让你在浏览器上体验。而和那些编程语言不同的是,Kotlin 体验网站实际上是一个全功能的集成开发环境,提供包括快速自动完成、实时后台编译以及在线的静态分析等功能。

马上体验

继续,我在这等你回来。

第 9 段(可获 0.74 积分)

文章评论