If表达式
在Kotlin中,if{: .keyword }是一个表达式,它会返回一个值;最后一行的表达式作为返回值;可以代替三元运算符 (如 ? 三元表达式)。
// Traditional usage var max = a if (a < b) max = b // With else var max: Int if (a > b) max = a else max = b // As expression val max = if (a > b) a else b //if{: .keyword }的分支可以是代码段, 最后一行的表达式作为段的返回值 val max = if (a > b) { print("Choose a") a } else { print("Choose b") b } |
For循环
for{:.keyword } 循环可以对任何提供迭代器(iterator)的集合进行遍历,语法如下:
for (item incollection) print(item)
//循环体可以是一个代码块. for (item: Int inints) { // ... } |
for{: .keyword }可以循环遍历任何提供了迭代器的集合。
Ø 有一个成员函数或者扩展函数iterator(),它返回一个类型
Ø 有一个成员函数或者扩展函数next(),并且
Ø 有一个成员函数或者扩展函数hasNext()返回 Boolean.
//如果你想要遍历一个数组或者一个list,你可以这么做: for (i inarray.indices) print(array[i]) |
While循环
while{:.keyword } 和 do{: .keyword }..while{: .keyword } 的使用方法和其他语言一致.
while (x > 0) { x-- } // do { val y = retrieveData() } while (y != null) // y is visible here! |
When表达式
when{: .keyword } 替代了c语言风格的switch操作符. 最简单的形式如下:
when (x) { 1 -> print("x == 1") 2 -> print("x == 2") else -> { // Note the block print("x is neither 1 nor 2") } } |
when{: .keyword } 将它的参数和所有的分支条件进行比较,直到某个分支满足条件。 when{: .keyword }既可以被当做表达式使用也可以被当做语句使用。
如果它被当做表达式, 符合条件的分支的值就是整个表达式的值,如果当做语句使用,则忽略单个分支的值。
就像if{:.keyword },每一个分支可以是一个代码块,它的值是最后的表达式的值。
else{: .keyword} 分支将被执行如果其他分支都不满足条件。如果 when{: .keyword } 作为一个表达式被使用,else{: .keyword } 分支是必须的,除非编译器能够检测出所有的可能情况都已经覆盖了。
1. 多个分支合并
如果很多分支需要用相同的方式处理,则可以把多个分支条件放在一起,用逗号(,)分隔:
when (x) { 0, 1 -> print("x == 0 or x ==1") else -> print("otherwise") } |
2. 在判断分支条件的地方使用任何表达式
when (x) { parseInt(s) -> print("s encodesx") else -> print("s does not encodex") } |
3. 可以检查一个值 in{: .keyword } 或者 !in{: .keyword } 一个范围 或者集合
when (x) { in 1..10 -> print("x is in therange") in validNumbers -> print("x isvalid") !in 10..20 -> print("x is outside therange") else -> print("none of theabove") } |
4. 可以检查一个值is{: .keyword }或者!is{: .keyword }某种特定类型
由于smart casts,你可以访问该类型的方法和属性而不用额外的检查。
val hasPrefix = when(x) { isString -> x.startsWith("prefix") else -> false } |
5. 可以用来替代if{: .keyword }-else{: .keyword }链
不提供参数,所有的分支条件都是简单的布尔值,而当一个分支的条件返回true时,则调用该分支:
when { x.isOdd() -> print("x is odd") x.isEven() -> print("x is even") else -> print("x is funny") } |