
170
|
第
11
章
Counting: 1
Counting: 2
Counting: 3
Counting: 4
使用 repeat 函数而不是循环是内部迭代器给出的说明,其中实际的循环过程由库
处理。
11.3
强制
when
语句进行穷举
问题
如何使编译器强制在 when 语句中为每种可能性都提供一个子句。
解决方案
在返回值的泛型类型中添加一个名为 exhaustive 的简单扩展属性,并将其链接到
when 代码块。
讨论
如同 if 语句一样,when 子句的显著特征是它可以返回一个值。它的行为与 Java 的
switch 语句相似,但是与 Java 不同,你不需要在每个子句中编写 break,也不需要
在其外部声明变量以返回值。
例如,假设你想将数字除以 3 来打印余数,可参见示例 11-6。
示例 11-6:将数字除以 3 的余数
fun printMod3(n: Int) {
when (n % 3) {
0 -> println("$n % 3 == 0")
1 -> println("$n % 3 == 1")
2 -> println("$n % 3 == 2")
}
}
如果 when 表达式不返回一个值,则 Kotlin 不需要覆盖所有情况,这是一个有用的示
例。从数学上来说,我们知道余数只能是 0、1 或 2,因此实际上这是一个覆盖所有情况
的检查,但编译器无法实现这一目标。如果将此简单函数转换为表达式,如示例 11-7 所
示,则将变得很清楚。