Kotlin 迷人的语言特性(上)
Kotlin 今天能够被大家所广泛认识,当然是要依赖于 Google 在 I/O 大会上力挺的结果,然而支撑 Kotlin 从众多语言中脱颖而出的是,它作为一门现代语言,吸收了许多现代语言所有的非常棒的特性,正是这些迷人的语言特性加上 Android 开发的无缝对接,让 Kotlin 一下击败 Java,俘获了大多数 Android 程序员的芳心。
空安全
空安全是 Kotlin 送给 Android 开发者第一个大礼,所有的 Java 开发者都会被 NullPointException 这个问题所困扰,不管是来自前辈,左辈(同事)、后辈(新手)还是自己坑自己,很多情况很难避免,Kotlin 通过引入可空类型和非空类型,将空安全从「运行时」强制前置到「编译时」,完美的解决了未知空安全的隐患。
![](https://img.haomeiwen.com/i1276113/0906a43f1cbf1b43.png)
类型推断与自动强转
当通过等号右边的的赋值可以明确知道你要定义的变量是什么类型的时候,Kotlin 允许你不为这个变量声明类型,而是自动推测出你想要声明的类型,这可以减少不必要的类型声明,提升开发效率。而且在一个变量如果已经在做过类型判断的是,后面再使用这个变量的时候,Kotlin 也能够自动强转成你想要的类型,而不用再写先判断再手动强转那样傻的代码。
![](https://img.haomeiwen.com/i1276113/a53b6db406d334e7.png)
集合操作
我之前写过一篇文章,专门讲述了 Kotlin 函数式三板斧的使用,就是 Kotlin 对集合操作及其方便的一个典型。Kotlin 作为一门支持函数式编程范式的语言,其标准库封装了大量对集合操作的快捷方法,有了这个库,我们基本可以抛弃之前 Java 中对集合操作封装的所有 Utils 方法。
![](https://img.haomeiwen.com/i1276113/8d70256719575ae1.png)
扩展
有的人说扩展让「面向扩展开放,面向修改封闭」在语言层面得到了支持,的确 Kotlin 的扩展特性让我们在不修改任何源代码的情况下,可以为类扩展出我们想要的新的方法,这个特性是在太棒了,就好比我们获得了可以在不拆掉一辆汽车就可以为它装上翅膀飞翔一般的能力,虽然和 Swift 相比,Kotlin 的扩展功能还不够强大。
![](https://img.haomeiwen.com/i1276113/6142d3cf73200013.png)
区间操作
Kotlin 让我们可以快速得到一个区间,并对其进行操作。
![](https://img.haomeiwen.com/i1276113/367fe02a37f19d71.png)
操作符重载
在一些自定义类中,如果我们能够为其自定义一些操作符,那么在我们调用这个方法的时候,就可以大大提高代码的可读性和书写时候的流畅度,也让代码变得极为简洁。
![](https://img.haomeiwen.com/i1276113/a2166f75b4ead51f.png)
默认函数参数
在 Kotlin 函数的参数中,我们可以为之定义默认值,这样我们在调用这个方法的时候如果这个参数不传递的话,Kotlin 就会使用那个默认参数的值,这样大大减少了 Java 中需要重载函数时既枯燥又无聊的代码复制。
![](https://img.haomeiwen.com/i1276113/d65f0b069ffb4586.png)
命名参数
当我们调用函数的时候,如果只有某几个参数想要传递,其他的参数都使用默认值,这个时候 Kotlin 的命名参数的特性会让你爱不释手,再也不会看到某个函数四个参数随机组合的重载了。
![](https://img.haomeiwen.com/i1276113/6539b1553d9df622.png)
中缀符
当我们用 infix 修饰一个只有一个参数的成员函数的时候,我们就把可以用中缀符的方式调用这个函数了,看起来实在是太酷了,稍有遗憾的是 Kotlin 并不支持前缀符。
![](https://img.haomeiwen.com/i1276113/e145e2b94afecd7e.png)
Kotlin 还有很多迷人的特性,我们下期继续。
![](https://img.haomeiwen.com/i1276113/fc6acaedd7d5284a.jpg)