今天来初步了解一下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表达式,你将用更少更简洁的代码写出实用的代码,并且安全、高效。