Kotlin介绍系列(二)基本语法(1)

方法定义

强类型的语言所以参数和返回值必须定义类型

fun sum(a: Int, b: Int): Int {
    return a + b
}

像上例中,如果函数体只有一个表达式,而且能推断出返回类型时,可以写成这样:

fun sum(a: Int, b: Int) = a + b

如果无返回类型,那么返回类型可以写Unit,或者不写

声明变量

只读变量,相当于Java中用final修饰的,使用val声明

val a: Int = 1
val b = 2    // 这里省略类型是因为此时类型是可以推断出来的

可变变量,使用关键字var声明

var c = 5 // 类型同样可推断
c += 5 

字符串模板

Kotlin中有类似JavaScript的字符串模板

var c = 5
val s1 = "a is $c" // now, s1 = "a is 5"
val s2 = "abc"
val s3 = "$s2.length is ${s2.length}" // now, s3 = "abc.length is 3"

空安全

空安全从来都是一件让人头疼的事情,在Java里,你总是会由于没有做空安全保护说不定哪里就会报类似NullPointerException。

  • 可空变量的声明
    首先,下面这种做法是不行的
// eg1
var a: String = "abc"
a = null // compilation error

因为限定了a的类型是String,那么它就不可以持有null对象
怎么纠正?

// eg2
var b: String? = "abc"
b = null // OK
  • 可空变量的访问
    首先如果我们访问eg1中的a,比如
    val l = a.length
    这是没问题的,为什么呢,因为a被限定死是String类型,而且也只能被赋予String类型的值,那么,无论如何它不为空,一定有length成员
    那么如果我们访问eg2中的b呢
val l = b.length // error: variable 'b' can be null

这时候,我们就需要做空保护了,传统地,我们可以像Java中做空保护一样这样写

if (b != null && b.length > 0) {
    print("String of length ${b.length}")
} else {
    print("Empty string")
}

或者用Kotlin的判断语句表达式

val l = if (b != null) b.length else -1

还有一种最便利的安全操作符?.
比如val l = b?.length
这种最方便于链式调用,比如

bob?.department?.name?.head

过程中有任意一项为空,表达式都会返回null

Kotlin介绍系列(二)基本语法(2)

你可能感兴趣的:(Kotlin介绍系列(二)基本语法(1))