Kotlin语法流程控制

Reference

分支结构

Kotlin 提供了两种控制方式 if 和 when。if 和传统的一致,when 类似 switch。

when 分支

对于检查条件没有类型限制,

var score = 'B'
when (score){
'A' -> {
println("you got A")
println("you are good")
}
'B', 'C' -> println("you got B or C")
'D' -> println("you got D")
else -> println("you got nothing")
}

when 表达式

var strRet = when (score){
'A' -> {
println("you got A")
println("you are good")
"got A"
}
'B', 'C' -> ("you got B or C")
'D' -> ("you got D")
else -> ("you got nothing")
}
println(strRet)

when 处理范围

使用 in,!in 运算符,可以检查表达式是否位于指定区间

when (x) {
in 1..10 -> print("x is in the range")
in validNumbers -> print("x is valid")
!in 10..20 -> print("x is outside the range")
else -> print("none of the above")
}

检查值是否是指定类型

使用 is,!is 可以判断类型

fun hasPrefix(x: Any) = when(x) {
is String -> x.startsWith("prefix")
else -> false
}

代替 if..else if 语句

没有参数时,每个分支都是一个逻辑表达式,true 的时候会执行相应语句

when {
x.isOdd() -> print("x is odd")
x.isEven() -> print("x is even")
else -> print("x is funny")
}

if 分支

可以作为语句和表达式

if 语句

if (布尔表达式或值){
//处理语句
}

if (布尔表达式或值){
//处理语句
}else if (布尔表达式或值){
//处理语句
}else{
//处理语句
}

if 表达式

var age = 20
var str = if (age > 20) "age 大于 20" else if (age < 20) "age 小于 20" else "age 等于 20"
println(str)

循环结构

for 循环

可以迭代任何提供 iterator 的集合

for (item in collection) print(item)

for (item: Int in ints) {
// ...
}

使用 range 表达式 操作符 ..

if (i in 1..10) { // equivalent of 1 <= i && i <= 10
println(i)
}

for (i in 1..4) print(i) // prints "1234"
for (i in 4 downTo 1) print(i) // prints "4321"
for (i in 1..4 step 2) print(i) // prints "13"
for (i in 4 downTo 1 step 2) print(i) // prints "42"

for (i in 1 until 10) { // i in [1, 10), 10 is excluded
println(i)
}

通过索引遍历 array 和 list

val array = arrayOf("a", "b", "c")
for (i in array.indices) {
println(array[i])
}

// 使用 withIndex 库函数
val array = arrayOf("a", "b", "c")
for ((index, value) in array.withIndex()) {
println("the element at $index is $value")
}

while 循环

和其他语言的用法一致

while (x > 0) {
x--
}

do {
val y = retrieveData()
} while (y != null) // y is visible here!

break 和 continue 控制

和其他语言的用法一致