Kotlin

Kotlin控制流if、when、for、while

2021-03-25  本文已影响0人  漆先生

一、If 表达式

在 Kotlin 中,if可以作为一个表达式⼀个表达式,简单的形式如下:

// 作为表达式 
val max = if (a > b) a else b

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

val max = if (a > b) {
    print("Choose a")
    a
} else {
    print("Choose b")
    b
}

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

二、When 表达式

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

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> {
        // 注意这个块
        print("x is neither 1 nor 2")
    }
}

如果 when 作为⼀个表达式使用,则必须有 else 分⽀ 除非编译器 能够检测出所有的可能情况都已经覆盖了[例如,对于 枚举(enum)类条目与密封(sealed)类⼦类型]。

很多分支需要用相同的方式处理,可以把多个分支条件放在⼀起,⽤逗号分隔:

when (x) {
    0, 1 -> print("x == 0 or x == 1")
    else -> print("otherwise")
}
fun inTen(a: Any) = a is Int && a in 1..10

fun example(x: Any) = when (x) {
    is String -> print(x.startsWith("prefix"))
    inTen(x) -> print("x is in the range")
    x is Int && x in 11..20 -> print("x is in the range")
    else -> print("inconformity")
}

三、For 循环

for 循环可以对任何提供迭代器(iterator)的对象进行遍历
在数字区间上迭代,请使用区间表达式:

for (i in 1..3) { 
    println(i) 
}
for (i in 6 downTo 0 step 2) {
    println(i) 
}

对区间或者数组的 for 循环会被编译为并不创建迭代器的基于索引的循环。想要通过索引遍历⼀个数组或者⼀个 list,可以这么做:

for (i in array.indices) {
    println(array[i])
}

//库函数 withIndex
for ((index, value) in array.withIndex()) {
    println("the element at $index is $value")
}

四、While 循环

while 与 do..while 照常使⽤

while (x > 0) {
    x--
}
do {
    val y = retrieveData()
} while (y != null) // y 在此处可见
上一篇下一篇

猜你喜欢

热点阅读