[关闭]
@lsmn 2015-09-24T14:12:37.000000Z 字数 2045 阅读 3110

为什么应该学习Kotlin

JetBrains Kotlin Java Android JavaScript


摘要

Mark Platvoet是一名热衷于研究新的编程语言、技术和方法的Java和.NET开发者。最近,他为JetBrains推出的新语言Kotlin所吸引。他认为,Kotlin非常简洁且富有表现力。巧合的是,开发者Mike Hearn近日也发表了一篇赞美Kotlin的文章,题为《为什么Kotlin是我的下一门编程语言》。Mike非常喜欢Kotlin,在未来5到10年中,他可能都会使用这门语言。

正文

Mark Platvoet是一名热衷于研究新的编程语言、技术和方法的Java和.NET开发者。最近,他为JetBrains推出的新语言Kotlin所吸引,并于近日撰文介绍了这门颇具生产力的语言。

许多语言似乎都是源于对某种其它语言的厌倦。在Mark看来,Kotlin应该也属于这种情况。不过他觉得,JetBrains的工程师仍然将Java视为一门优秀的语言。只是,Java太成熟了,改进和增加特性比较困难,因为要保持向后兼容。Kotlin所做的工作就是吸取Java和其它语言的经验和教训,并以此为基础进行改进。

Kotlin处理null的方式是Mark最喜欢的特性之一。以下面的Java方法为例:

public void foo(Bar bar) { /*…*/ }

对于这样一个典型的方法,如果传入的参数为null,那么通常的处理方式是检查输入:

public void foo(Bar bar) { 
  if (bar == null) 
    throw IllegalArgumentException(); /*…*/
}

如果调用该方法时传入了null,那么它会抛出异常,并提供有用的信息。但这要到运行的时候才能看到。如果方法定义本身就能明确表达不接受null参数的意图就好了。于是,上述代码可以进一步改进为:

public void foo(@NotNull Bar bar) { 
  if (bar == null) 
    throw IllegalArgumentException() /*…*/
}

如此一来,像IntelliJ IDEA这样的工具在检测到调用者可能传入null时就会提醒开发者。这样的代码没错,但就是有点啰嗦。

Kotlin采用了一种不同的null处理方式。它对可空类型和不可空类型作了区分,可空的类型后面会跟一个问号,比如*Bar?*,而*Bar*类型的变量则不可为空。于是,在Kotlin中,上述Java代码就变成了下面这样:

public fun foo(bar : Bar) { /*…*/ }

Mark认为,Kotlin非常简洁且富有表现力。这从上面的例子可见一斑。Mark还特别指出,他所说的表现力是指代码可以明确的表达开发者的意图,而且有良好的可读性。

Kotlin的互操作性是Mark提到的另一特性。Kotlin与Java的互操作性非常好。开发者可以直接从Kotlin中调用Java代码,而且不需要任何外观模式或其它中间逻辑;从Java调用Kotlin同样简单。Kotlin文件和Java文件可以自由混合。即使是现有的Java项目,也可以利用Kotlin,而那些经过严格测试的核心代码可以保持不变。Kotlin运行在JDK 6上,这将使Android开发者可以利用Java近几年的发展成果,比如Lambda表达式。

无独有偶。开发者Mike Hearn近日也在Medium上发表了一篇赞美Kotlin的文章,题为《为什么Kotlin是我的下一门编程语言》。Mike非常喜欢Kotlin,在未来5到10年中,他可能都会使用这门语言。Mike根据自己的经验将Kotlin的优势总结为如下几点:

Mike的部分观点与Mark不谋而合。此外,Mike还总结了Kotlin的一些优秀特性,感兴趣的读者可以进一步阅读

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注