所以说 Java 语言和安卓 API 是驱动我们转向类似 Kotlin 语言的两个重要的因素。这不是说 Java 6 没有问题,因为 Kotlin 解决了 Java 6 的许多问题,但是我不认为那是 Kotlin 作为一个替代方案的充分原因,因为其他的方案也可以带来同样的好处。
Kotlin 入门
Kotlin 是公司 JetBrains 研发的语言。市面上为各种语言开发的 IDE 很多,但是 Intelli J 平台是 Android Studio 的基础。在他们的网站上,他们这样描述 Kotlin :
为 JVM、Android 和浏览器而生的静态编程语言。
它的目标是 JVM、安卓和 Java 6 字节流。他们想在他们的语言里增加这些特性,而且持续支持 Java 6、JVM 和安卓系统市场。他们特别关注和 Java 的相互调用,这点接下来会讨论。
Kotlin 语法速成
网站上有许多的很棒的指导来学习语法,但是我还是会很快地介绍一下,然后再解释为什么这些语法有利于安卓开发。我们以一个这样的方法定义的语法开始。
[代码]csharp代码:
1
2
3
fun sum(a: Int, b: Int): Int {
return a + b
}
我们有一个 “fun” 的定义,这代表着函数。函数名和第一个要注意的事情是这和 Java 有明显的不同。参数名的顺序和参数的类型保留了下来 – 名字后面跟着类型。返回值类型在函数末尾声明。没有分号。
另外一个有意思的事情是这个函数还可以有单行描述,我们事实上可以不用大括号和 return,定义函数和表达式一样。
[代码]csharp代码:
1
fun sum(a: Int, b: Int) = a + b
我们接下来还会看到更简洁的语法。这里有另外一个例子,这个看起来像一个 main 函数,如果你写一个普通的 Java 应用的话:
[代码]csharp代码:
1
2
3
fun main(args: Array<string>) {
println("Args: $args")
}</string>
数组的语法不太一样。但是处理得十分自然。 编译后的字节码会使用一个字符串的数组,但是在你的代码里却把它处理地像一个普通的数组。它也支持字符串的插入;我们可以写一个串,然后引用它其中的变量,并且可以自动的替换其中的变量。
最后,看看变量:
[代码]csharp代码:
1
2
val name = "Jake"
这里我用一个叫做 “name” 的变量给一个字符串命名,而且这里没有类型定义。语言会自动解释类型,因为它只可能是串。它有 “val” 的前缀而 “Val” 是它的值,并且是个不可以修改的值。如果我们想修改它,我们就需要用 “var” 作为前缀定义变量。
这个 : List<String> 是一个看起来像在 field 上的类型,它接在名字后面,像一个方法。最后,当我们调用构造函数的时候,我们不需要使用 “new” 关键字。其他的语法都是一样的,就是不要 “new”。
Kotlin 语言特性
让我们看看那些语言本身的特性,看看他们是如何帮助我们构建安卓应用的。我指出过这些 util 类都是反设计模式的,而且它们会在你的应用里越来越不受控制……
函数扩展
Kotlin 有扩展函数的概念。这不是 Kotlin 语言独有的,但是和其他语言里面我们看到的扩展又不太一样。如果我们在纯 Java 语言的环境下添加一个 date 的方法,我们需要写一个 utils 类或者 dates 类,然后增加一个静态方法。它接收一个实例,然后做些事情,可能会返回一个值。
[代码]java代码:
1
2
3
4
5
static boolean isTuesday(Date date) {
return date.getDay() == 2;
}