相比语句而言,表达式更倾向于自成一块,避免与上下文共享状态,互相依赖,因此我们可以说它具备更好的 隔绝性 。隔绝性意味着杜绝了副作用,因此我们用表达式描述逻辑可以更加安全,此外,表达式通常也具备更好的表达能力。
典型的一个例子就是表达式更容易进行组合。由于每个表达式都具备值,并且也可以将另一个表达式作为组成其自身的一部分,所以我们可以写出一个复合表达式。举个例子:
val res : Int?=try{
if(result.sucess){
jsonDecode(result.response)
} else null
} catch(e: JsonDecodeException){
null
}
这个程序描述了获取一个HTTP响应结果,然后进行json解码,最终赋值给res变量的过程。它向我们展示了Kotlin如何利用多个表达式组合表达能力:
1 . try在Kotlin中也是一个表达式,try/catch/finally语法的返回值类型由try或catch部分决定,finally不会影响;
2. 在Kotlin中,if-else很大程度上代替了传统三元运算符的做法,虽然增加了语法词数量,但是减少了概念,同时更利于阅读。
3. if - else的返回值即try部分的返回值,最终的指由try或catch部分决定。
--------------------------
Kotlin中的“?”
虽然Kotlin没有采用三木运算符,然而它存在很像的语法“?”。注意,这里的问号和冒号必须放在一起使用,他被叫做Elvis运算符,或者null合并运算符。由于Kotlin可以用“?”来表示一种类型的可null性,我们可以用“?:”来给一种可空类型的变量指定为空情况下的值,它有点类似Scala中的getOrElse方法。你可以通过以下的例子理解Elvis运算符:
val maybeInt :Int?=null
>>> maybeInt ?: 1
1
-----------------------------
是不是觉得相当优雅?接下来,我们再来介绍Kotlin中的when表达式,它比我们熟悉的Switch语句要强大的多。