《Kotlin核心编程》 ——2.4.3 复合表达式:更好的表达力

举报
华章计算机 发表于 2020/02/21 20:58:47 2020/02/21
【摘要】 本节书摘来自华章计算机《Kotlin核心编程》 —— 书中第2章,第2.4.3节,作者是水滴技术团队 。

2.4.3 复合表达式:更好的表达力

相比语句而言,表达式更倾向于自成一块,避免与上下文共享状态,互相依赖,因此我们可以说它具备更好的隔离性。隔离性意味着杜绝了副作用,因此我们用表达式描述逻辑可以更加安全。此外,表达式通常也具有更好的表达能力。

典型的一个例子就是表达式更容易进行组合。由于每个表达式都具有值,并且也可以将另一个表达式作为组成其自身的一部分,所以我们可以写出一个复合的表达式。举个例子:

val res: Int? = try {

    if (result.success) {

        jsonDecode(result.response)

    } else null

} catch (e: JsonDecodeException) {

    null

}

这个程序描述了获取一个HTTP响应结果,然后进行json解码,最终赋值给res变量的过程。它向我们展示了Kotlin如何利用多个表达式组合表达的能力:

try在Kotlin中也是一个表达式,try/catch/finally语法的返回值类型由try或catch部分决定,finally不会产生影响;

在Kotlin中,if-else很大程度上代替了传统三元运算符的做法,虽然增加了语法词数量,但是减少了概念,同时更利于阅读;

if-else的返回值即try部分的返回值,最终res的值由try或catch部分决定。

Kotlin中的“?:”

虽然Kotlin没有采用三元运算符,然而它存在一个很像的语法“?:”。注意,这里的问号和冒号必须放在一起使用,它被叫作Elvis运算符,或者null合并运算符。由于Kotlin可以用“?”来表示一种类型的可空性,我们可以用“?:”来给一种可空类型的变量指定为空情况下的值,它有点类似Scala中的getOrElse方法。你可以通过以下的例子理解Elvis运算符:

val maybeInt: Int? = null

>>> maybeInt ?: 1

1

是不是觉得相当优雅?接下来,我们再来介绍Kotlin中when表达式,它比我们熟悉的switch语句要强大得多。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。