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 (布尔表达式或值){ //处理语句 }elseif (布尔表达式或值){ //处理语句 }else{ //处理语句 }
if 表达式
var age = 20 var str = if (age > 20) "age 大于 20"elseif (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!