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")
}
- 可以用任意表达式(而不只是常量)作为分支条件
- 也可以检测⼀个值在(in)或者不在(!in)⼀个区间或者集合中
- 检测⼀个值是(is)或者不是(!is)⼀个特定类型的值。注意:由于智能转换,你可以访问该类型的方法与属性而无需任何额外的检测。
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 在此处可见