阅读 51

Kotlin手记-(6)if和when条件表达式

if条件语句

Kotlin 提供了几种实现条件逻辑的机制,其中最常见的是 if-else 语句。如果 if 关键字后面括在圆括号内的表达式求值为 true,则会执行该分支中的代码(即,紧跟在后面的括在大括号内的代码)。否则,会执行 else 分支中的代码

  if (x == 2) {
        println("x等于2")
    } else {
        println("x不等于2")
    }
复制代码

在 Kotlin 中,if是一个表达式,即它会返回一个值。 因此就不需要三元运算符(条件 ? 然后 : 否则),因为普通的 if 就能胜任这个角色。

val max = if (a > b) a else b
println(max)
复制代码

if 的分支可以是代码块,最后的表达式作为该块的值:

   val max = if (a > b) {
        print("max= a")
        a
    } else {
        print("max= b")
        b
    }
复制代码

如果你使用 if 作为表达式而不是语句(例如:返回它的值或者把它赋给变量),该表达式需要有 else 分支。

When 表达式

when 表达式取代了类 C 语言的 switch 语句。其最简单的形式如下:

    var a = 2
    when (x) {
        1 -> print("x = 1")
        2 -> print("x = 2")
        else -> {
            print("x既不是1也不是2")
        }
    }
复制代码

when 将它的参数与所有的分支条件顺序比较,直到某个分支满足条件。 when 既可以被当做表达式使用也可以被当做语句使用。如果它被当做表达式, 符合条件的分支的值就是整个表达式的值,如果当做语句使用, 则忽略个别分支的值

如果很多分支需要用相同的方式处理,则可以把多个分支条件放在一起,用逗号分隔:如上面的代码1,2可以合并

    var kotlin = 2
    when (kotlin) {
        1,2 -> print("x == 1 or x == 2" )
        else -> { // 注意这个块
            print("x既不是1也不是2")
        }
    }
复制代码

我们可以用任意表达式(而不只是常量)作为分支条件

   when (kotlin) {
        x.toInt() -> print("x.toInt()" )
        else -> { // 注意这个块
            print("x is neither 1 nor 2")
        }
    }
复制代码

我们也可以检测一个值在(in)或者不在(!in)一个区间或者集合中:

    when (kotlin) {
        in 1..10 -> print(" kotlin in 1..10")//或者是 !in
        else -> {
            print("x不在1..9区间内")
        }
    }
复制代码

另一种可能性是检测一个值是(is)或者不是(!is)一个特定类型的值。注意: 由于智能转换,你可以访问该类型的方法与属性而无需任何额外的检测。

    when (kotlin) {
        is Int -> print(" kotlin is Int") //Kotlin是Int类型的
        else -> {
            print("Kotlin不是Int类型的")
        }
    }
复制代码

when 也可以用来取代 if-else if链。 如果不提供参数,所有的分支条件都是简单的布尔表达式,而当一个分支的条件为真时则执行该分支:

when {
   x>0 -> print("x 大于0")
    x<0 -> print("x小于0")
    else -> print("x等于0.")
}
复制代码

扫描关注公众号

文章分类
Android
文章标签