初窥Kotlin
今天来初步了解一下Kotlin的特性和一些语法,先看例子:
package Kt01
data class Person(val name: String, //<1>
val age: Int? = null) //<2>
fun main(vararg args: String) { //<3>
val persons = listOf(Person("crazypandas", 22), //<4>
Person("Bob", 18),
Person("Diana"))
val oldest = persons.maxBy { it.age ?: 0 } //<5>
println("The oldest is: $oldest.") //<6>
}
//The oldest is: Person(name=crazypandas, age=22). //<7>
<1>数据类(data class):我们经常需要创建一些只保存数据的类,在这些类中,我们往往只要保存数据而已,不需要做修改,并且往往需要getter和setter方法。Kotlin很聪明的帮我们做了这些事情,在Kotlin中,这种类称为数据类,并标记为`data`:
data class Person(val name: String, val age: Int? = null)
编译器自动从主构造函数(博主后面的文章会介绍)中声明的所有属性导出下列成员:
equals() / hashCode()
toString()
componentN()
copy()
因为这篇文章的主题是初窥,因此不会太详细的介绍,只是让你初步了解一下Kotlin的特性。
<2>可空类型(Int?):允许值为null
<3>顶层函数(top-level):如果学过c、c++语言的话,这个就比较好理解了,和c的main函数很像是不是?
<4>传入名字和属性,构造Person对象,并用listOf函数收集成为一个集合。
<5>lambda 表达式,"elvis"操作符
<6>字符串模版
<7>运行结果
你可以很简单的就声明了一个简单的data class,仅仅给它name(名字)和age(年龄)这两个属性,而且age如果你不指定,默认会是null。然后创建了一个Person的集合,并且不给Diana指定年龄,此刻Diana的age属性将被置为默认值,这里是null。然后,再使用函数maxBy,并且搭配一个lambda表达式对集合进行排序赛选,选出年龄最大的crazypandas。在lambda表达式
it.age ?: 0
中,it是默认的可迭代对象,你也可以指定其他名字,默认的名字是it,然后是Elvis操作符 (?:)表示如果age属性为null则在排序时age相当于0,Elvis操作符 (?:)的意思是如果问号前的条件成立,则执行冒号后的内容。
因为Diana的age没有指定,所以在排序的时候会当成0,由此排序赛选出年龄最大的crazypandas。
到了此刻,你的脑中应该已经对Kotlin有了一定的了解,学过c或者c++、java的你也许你会奇怪分号去哪了?是的,Kotlin不用写分号,如果你学过其他的面向对象的语言,也许你会惊叹Kotlin语法的简洁。仅仅一行就定义出了一个可用的数据类。结合labmda表达式,你将用更少更简洁的代码写出实用的代码,并且安全、高效。