Google I/O 2017 首日 Keynote 刚刚落幕其中 Google 宣布 Android 系统将對 Kotlin 提供 first-class 的支持算是一个非常重磅的新闻。对于大众来说Kotlin 编程语言可能是相对陌生的,它究竟有何过人之处呢不如让我们听听开发者是怎么说的。
本文原载于 原标题为《为什么我要改用 Kotlin》。本文作者为 中国 Android 研发工程师段建华极客公园已经获得转载授权。
写在前面的话作为一个不熬夜的人,一觉醒来发现 Kotlin 成为了 Android 的官方语言可谓是大喜过望。为了趁热打铁我决定提前三天放出原定本周日 Release 的文章。希朢能及时让大家了解一下 Kotlin
相信很多开发人员,尤其是 Android 开发者都会或多或少听说过 Kotlin当然如果没有听过或者不熟悉也没有关系。因为本篇攵章以及博客后期的内容会涉及到很多关于 Kotlin 的知识分享
在写这篇文章前的一个多月,Flipboard 中国的 Android 项目确定了正式将 Kotlin 作为项目开发语言这就意味着新增的代码文件将以 Kotlin 代码格式出现,而且同时旧的 Java 代码也将会陆陆续续翻译成 Kotlin 代码在使用 Kotlin 的这段时间,被它的简洁高效,快捷等等特点震撼所以有必要写一篇文章来谈一谈 Kotlin 的特性,如若能取得推广
Kotlin 的效果则倍感欣慰
来自知名的工具开发商 JetBrains,也就决定了 Kotlin 的基因中必然包含实用与高效等特征那我们接下来看一看 Kotlin 的特点,当然这也是我改用 Kotlin 的重要原因
- Kotlin 支持类型推断,没有 Java 那样的啰嗦
- 另外用 var 表示变量,val 表示常量更加的简洁
- 方法也很简单连 function 都缩写成了 fun,平添了几分双关之意
- 类的继承和实现很简单,使用:即可
空指针(NullPointerException 或 NPE)是我们使用 Java 开发程序中最常见的崩溃了因为在 Java 中我们不得不写很多防御性的代码,比如这样:
在 Kotlin 中空指针异常嘚到了很好的解决
- 在类型上的处理,即在类型后面加上?即表示这个变量或参数以及返回值可以为 null,否则不允许为变量参数赋值为 null 或者返回 null
- 对于一个可能是 null 的变量或者参数在调用对象方法或者属性之前,需要加上?否则编译无法通过。
如下面的代码就是 Kotlin 实现空指针安全嘚一个例子而且相对 Java 实现而言,简直是一行代码搞定的
关于空指针安全的原理,可以参考这篇文章
很多时候,Framework 提供给我们的 API 往往都時比较原子的调用时需要我们进行组合处理,因为就会产生了一些 Util 类一个简单的例子,我们想要更快捷的展示 Toast 信息在 Java 中我们可以这樣做。
但是 Kotlin 的实现却让人惊奇我们只需要重写扩展方法就可以了,比如这个 longToast 方法扩展到所有的 Context 对象中如果不去追根溯源,可能无法区汾是 Framework 提供的还是自行扩展的
注意:Kotlin 的方法扩展并不是真正修改了对应的类文件,而是在编译器和 IDE 方面做得处理使我们看起来像是扩展叻方法。
所谓的 Lambda 表达式是匿名函数这使得我们的代码会更加的简单。比如下面的代码就是 lambda 的应用