天天看点

为什么你该摒弃 Java ,全面转向 Kotlin 语言?

我想告诉你一个名为 kotlin 的新的编程语言,以及为什么你要开始考虑使用它来开发你的下一个项目。我以前喜欢 java ,但是去年我发现了 kotlin ,只要有可能我就会用 kotlin 来写代码。现在我实在无法想象有什么地方只有 java 能做,而 kotlin 不能的。

kotlin 是 jetbrains 开发的,这是一家开发了一整套 ides 的公司,诸如 intellij 和 resharper, 还有正在闪耀光芒的 kotlin。这是一个务实而且简洁的编程语言,真正让人感觉身心愉悦的编程语言,而且效率非常高。

这里有一堆你应该完全转向 kotlin 语言的理由:

kotlin 是 100% 与 java 具备互操作性的。你可以使用 kotlin 继续你老的 java 项目开发。所有你熟悉的 java 框架仍然可用,任何框架,不管是 kotlin 写的,还是你固执 java 小伙伴写的都可以。

1# 熟悉的语法

kotlin 不是诞生于学术界的怪异语言。其语法是 oop 领域的任何开发者都熟悉的,可以或多或少的有一些了解。当然和 java 还是有些不同的,例如重构后的构造函数以及使用 val 的变量声明等等。下面是一个基本的 kotlin 示例代码:

可以重载预定义的一组操作符来提升代码的可读性:

一些对象是可以解构的,一个很有用的例子就是对 map 进行迭代:

完全为了可读性:

还记得你第一次用 java 实现一个 list 的排序吗?你找不到一个 sort() 函数,然后你就四处求助,最终找到了 collections.sort()。后来你需要将一个字符串的首字符变成大写,最终你还是自己写了一个方法来实现,因为你当时还不知道有这么个东西 stringutils.capitalize().

如果只有一种方法可以向已有的类添加新的函数,这样 ide 就可以帮助你在代码完成时找到正确的函数。在 kotlin 里你可以这么做:

标准库扩展了 java 原来类型的功能,这是字符串对象所需要的:

java 是我们应该称之为是一个几乎静态类型的编程语言。java 的 string 变量类型无法保证它不会等于 null。尽管我们已经习惯了这样的情况,但它否定了静态类型检查的安全性,导致 java 程序员总是活在各种空指针异常的恐惧中。

kotlin 通过区分非空类型和允许为空类型来解决这个问题。类型默认是不允许为空的,可以通过在后面加一个 ? 问号来表示允许为空,例如:

如果没有适合你的,那么你应该是需要一个空指针了,你将不得不显式的进行处理:

嘿,帅哥,这是一个很好的 lambda 系统 —— 在完美的可读性和简洁之间取得非常好的平衡,这得益于非常聪明的设计选择。其语法简单直接:

优点体现在:

如果 lambda 是方法的最后一个参数或者是唯一参数的话,那么方法的括号可以移动或者省略.

如果我们选择不去声明单参数的 lambda 表达式的参数,那么 kotlin 会隐式的将之命名为 it.

结合上述优点,下面的三个不同的语句效果一样:

kotlin 的 lambda 系统和扩展函数结合,可以非常棒的用来开发各种 dsl。例如 anko 这个 dsl 的例子可以增强 android 的开发:

如果你打算开始使用 kotlin 开发项目,在工具上你会有很多的选择。但我强烈推荐使用 intellij ,因为它自带 kotlin 的支持 — 它的特点展示了同一组人设计的开发工具和语言时的优势。

只是给你一个很小但有非常聪明的例子,这是我从 stackoverflow 粘贴过来的 java 代码执行后弹出的窗口:

为什么你该摒弃 Java ,全面转向 Kotlin 语言?

intellij 会提醒你粘贴了 java 的代码到 kotlin 文件里。

继续阅读