本文概览:
- Kotlin 的基本示范
- Kotlin 语言的主要特征
- Android 和服务器端开发的可能性
- Kotlin 与其他语言的区别
- 用 Kotlin 编写并运行代码
Kotlin 到底是什么 ? 它是一种针对 Java 平台的新编程语言。Kotlin 简洁、安全、务实,并且专注于与 Java 代码的互操作性。它几乎可以用在现在 Java 使用的任何地方 :服务器端开发、Android 应用,等等。Kotlin 可以很好地和所有现存的 Java 库和框架一起工作,而且性能水平和 Java 旗鼓相当。本文我们将详细地探讨 Kotlin 的主要特征。
Kotlin初体验
让我们从一个小例子开始,来看看 Kotlin 代码长什么样子。这个例子定义了一个 Person 类来表示“人”,创建一个“人”的集合,查找其中年纪最大的人,并打印结果。尽管这是非常小的一段代码,从中也可以看到 Kotlin 许多有趣的特性。
我们对其中的一些特性做了标记,以便你可以方便地在本书后续的内容中找到它们。
代码简要地进行了解释,但是如果有些内容你现在还无法理解,请不要担心,稍后我们会详细讨论。
如果你想尝试运行这个例 子,最简单的方法是使用 http://try.kotl.in 的在线 Playground。输入示例代码并单击 Run 按钮,代码将会执行。
![](http://i.imgur.com/z5e5rw1.png)
你声明了一个简单的数据类,它包括了两个属性:name和age。age属性默认为null(如果没有指定)。在创建“人”的列表时,你省略了Alice的年龄,所以这里年龄使用了默认值null。然后你调用了maxBy函数来查找列表中年纪最大的那个“人”。传递给这个函数的lambda表达式需要一个参数,使用it作为这个参数的默认名称。如果age属性为null,Elvis运算符(?:)会返回零。因为Alice的年龄没有指定,Elvis运算符使用零代替了它,所以Bob幸运地成了年纪最大的人。
喜欢这样的代码吗 ? 继续读下去,你将会学习到更多,并成为一名 Kotlin 专家。我们希望不久之后,在你自己的项目中也能看到这样的代码,而不只是在书上。
Kotlin的主要特征
你大概已经知道了 Kotlin 是一种怎样的语言,让我们更加深入地了解一下它的关键属性。首先,我们来看看你能用 Kotlin 创造哪些种类的应用程序。
目标平台 :服务器端、Android 及任何 Java 运行的地方
Kotlin 的首要目标是提供一种更简洁、更高效、更安全的替代 Java 的语言,并且适用于现今使用 Java 的所有环境。Java 是一门非常受欢迎的语言,它广泛地应用于不同的环境 :小到智能卡 (JavaCard 技术 ),大到 Google、Twitter、LinkedIn 和其他这种规模的互联网公司运行的最大的数据中心。在这些地方,使用 Kotlin 可以帮助开发者在实现目标的同时减少代码并避免麻烦。
Kotlin 最常见的应用场景有 :
- 编写服务器端代码(典型的代表是 Web 应用后端)
- 创建 Android 设备上运行的移动应用
但 Kotlin 还有其他用武之地。例如,可以使用 Intel Multi-OS Engine((https:// software.intel.com/en-us/multi-os-engine)让 Kotlin 代码运行在 iOS 设备上。还可以 使用 Kotlin 和 TornadoFX(https://github.com/edvin/tornadofx)以及 JavaFX(http://mng.bz/500y) 一起来构 建桌面应用程序。
除了 Java 之外,Kotlin 还可以编译成 JavaScript,允许你在浏览器中运行 Kotlin 代码。但截止本书撰写时,对 JavaScript 的支持仍在 JetBrains 内部探索并进行原型 开发,这超出了本书的范围,而其他一些平台也在考虑支持 Kotlin 的未来版本。
正如你所看到的,Kotlin 的目标平台是相当广泛的。Kotlin 并没有被限制在单 一的问题域,也没有被限制在解决软件开发者面临的某一类型的挑战。相反,对所 有开发过程中涌现的任务,Kotlin 都提供了全面的生产力提升。它借助支持特定领 域或编程范式的库,提供了卓越的集成水准。接下来让我们来看看 Kotlin 作为一种 编程语言的关键特质。
静态类型
Kotlin 和 Java 一样是一种静态类型的编程语言。这意味着所有表达式的类型在 编译期已经确定了,而编译器就能验证对象是否包含了你想访问的方法或者字段。
这与 动态类型 的编程语言形成了鲜明的对 比,后者在 JVM 上的代表包括 Groovy 和 JRuby。这些语言允许你定义可以存储任何数据类型的变量,或者返回任 何数据类型的函数,并在运行时才解析方法和字段引用。这会减少代码量并增加创 建数据结构的灵活性。但它的缺点是,在编译期不能发现像名字拼写错误这样的问题,继而导致运行时的错误。
另一方面,与 Java 不同的是,Kotlin 不需要你在源代码中显式地声明每个变量 的类型。很多情况下,变量类型可以根据上下文来自动判断,这样就可以省略类型声明。这里有一个可能是最简单的例子 :
val x = 1
在声明这个变量时,由于变量初始化为整型值,Kotlin 自动判断出它的类型是 Int。编译器这种从上下文推断变量类型的能力被称作类型推导。
下面罗列了一些静态类型带来的好处 :
- 性能——方法调用速度更快,因为不需要在运行时才来判断调用的是哪个方法。
- 可靠性——编译器验证了程序的正确性,因而运行时崩溃的概率更低。
- 可维护性——陌生代码更容易维护,因为你可以看到代码中用到的对象的类型。
- 工具支持——静态类型使 IDE 能提供可靠的重构、精确的代码补全以及其他 特性。
得益于 Kotlin 对类型推导的支持,你不再需要显式地声明类型,因此大部分关 于静态类型的额外冗长代码也就不复存在了。
当你检视 Kotl