本文一开始似乎有点奇怪:通常鼓吹某个编程语言的文章一上来都会列出新语言都有哪些酷的特性。不过本文不是这样,哪些我们稍后一些再聊。
我们先了解一下其他方面,因为针对开发人员评估编程语言,一个2013年的研究表名,编程语言的特性相对于语言的生态来说,重要程度相对要低一些,这也跟我的经验相符。那么,下面就是我们需要先介绍的:
Kotlin 会编译成 JVM 字节码或者 JavaScript。它不需要新写一个编程语言内核。Java 开发者肯定会很感兴趣这门语言,不过对于其他所有使用带有垃圾收集机制的语言的开发者来说,同样值得关注,这些语言包括 Scala, Go, Python, Ruby 和 JavaScript。
Kotlin 源自产业界, 而非学院。它解决了当前程序设计所面临的实际问题。例如,类型系统可以避免空指针异常的问题。
使用 Kotlin 不需要费用! 它是开源的, 但这不是我要说的,我要说的是它有一个高质量的,Java 到Kotlin 转换工具,非常关注 Java 二进制的兼容性。你可以将一个 Java 工程全部转换,一次只能转换一个文件。甚至上百万行的复杂程序。这就是我为什么使用 Kotlin 的原因,我期待所有的开发者都使用它。
上面已经显示,Kotlin 程序可以使用已经存在的 Java 框架和类库,甚至依籁注解处理的高级框架。互操作是无缝的,而且不需要包装器和适配层。它可以集成Maven,Gradle或者其他的编译系统。
它很容易上手,简单地阅读一下参考手册几个小时就可以学. 语法精益而直观。Kotlin 有点像 Scala, 但它更简单。语言平衡了简洁和可读性。
它没有强制的编程哲学,像过度函数编程(FP)和面向对象风格。
它没有运行时开销, 标准库小而紧凑,它主要包括 Java 标准库的扩展。大量使用内联编译时间的功能性结构类似 map/filter/reduce 管道。
与 Anko 和 Kovenant 这样的框架结合,轻量的资源意味着 Kotlin 开始在 Android 开发者中流行如果你在做 Android 开发,你很快就会获得好的工作单位。你可以阅读 a report written by a developer at Square,分享了他们使用 Kotlin 和 Android 的经验,Kotlin 代码就像 Java 一样。完全支持调试,单元测试,分析等等。
功能特性
Kotlin 因其对生态系统上的关注而从海量新兴编程语言中脱引而出: JetBrains 了解到生产力的来源不只是在于更方便的语法。
尽管如此,Kotlin 还是有许多有用的功能特性,它们让编写代码的人乐在其中:
1、我们已经提起过 空指针安全 (这是可选的一项功能),它会让编译器系统性的将潜在的空指针标识为无效的。不想某些语言那样,这并不会涉及到一个可选类型且因此是零开销的 。其它的语言特性确保了它不会是不方便的。
2、精益的语法: 类型推断在任何地方都能起作用,单行方法只用一行就行了,简单的结构体或者JavaBean也可以用一行就能被声明出来。 Real 属性 会在幕后为 Java 互操作生成 getFoo/setFoo 方法。函数可以存在于类的外部。
3、异常是未经检查的。
4、向一个类添加 data 注解会触发样板程序的自动生成,像是 equals, hashCode, toString, copy 方法还有对可变扩展的支持。无需构建器你就很方便的拥有了不可变的类。
而如果你确实需要构建复杂的结构,有一种灵巧的语言特性的组合能使得 构建器 条理清晰且类型安全(读是可自动完成的)。如果你是使用的 Google Protocol Buffers 来存储结构性的数据,那也会更加的容器。
5、对函数式编程的支持 使用了 零开销的 lambda 以及在 Java 集合上做映射和折叠的能力。Kotlin 的类型系统能在集合上做可变和不可变视图的区分。
6、扩展函数 让你可以给类添加方法,而无需修改他们的源代码。这在初次看起来像是一个用来避免 FooUtils 风格的类的语法糖。到后来你会发现这样做让你可以很容易的通过自动补全功能来发现新的方法,使你可以构建出强大的语言扩展并让你可以将现有的 Java API 同 Kotlin 的特性集成。这些特性有 …
7、操作符重载。而这个确实不错:这里没有 Scala / Perl 风格的行捣乱了。操作符映射到特定的方法名称,如此就能重载现有操作符的行为了(包括函数的调用), 但是你不能定义一个完全是新的操作符。这样就达到了能力和可读性之间的一个平衡。
8、Kotlin 并没有宏或者其它方式来对语言进行重新定义,但是有一些小心设计出来的特性,使得那些库表现得更像语言扩展,而不是对象的集合。
9、你会喜欢使用 fiber, actor, 和 Go风格的 channel 吗? 一个叫做 Quasar 的库为你涵盖到了这些。
10、使用 Markdown 而不是 HTML 来制作你的 API 文档。这使得编写 JavaDoc 令人高兴了许多。
11、更好的 generics。如果你在放入一个类型变量时,超类和扩展究竟有什么意义从未得到完全认真的处理, 别担心:这不是你的问题。Java 的 generics 确实有点令人困惑。Kotlin 解决了这个问题。
12、派发 (转发方法) 是自动的。
13、== 操作符真正做了你实际期望的事情。
14、你喜欢快速和方便的异步编程吗? 你当然会喜欢的。
15、字符串插值“works like ${this.example}!”
16、函数参数可以被命名、可选而且类型可变。
17、许多许多其它的调整和改进。如果 Java 的有些东西让你不爽的话,我感觉其中一半的不爽在 Kotlin 中都不会有。