控制流
if/when/for、安全 cast。
30 分钟
控制流
Kotlin 的控制流与 Java 相似但更表达力强:if 可作表达式返回值,when 替代 switch 且支持模式匹配,for/while 遍历区间与集合。
学习目标
- 掌握
if表达式、when多分支与安全 cast - 熟练使用
for、while与区间..、until - 理解
break、continue与标签跳转
if 表达式
fun max(a: Int, b: Int): Int {
return if (a > b) a else b
}
fun grade(score: Int): String {
val label = if (score >= 90) "A"
else if (score >= 60) "Pass"
else "Fail"
return label
}
fun main() {
println(max(10, 20)) // 20
println(grade(85)) // Pass
}
if 有返回值,可替代三元运算符 ? :(Kotlin 无三元运算符)。
when 表达式
fun httpStatus(code: Int): String = when (code) {
200 -> "OK"
404 -> "Not Found"
in 400..499 -> "Client Error"
in 500..599 -> "Server Error"
else -> "Unknown"
}
fun describe(obj: Any): String = when (obj) {
is String -> "字符串,长度 ${obj.length}"
is Int -> "整数: $obj"
is List<*> -> "列表,${obj.size} 个元素"
else -> "其他: ${obj::class.simpleName}"
}
fun main() {
println(httpStatus(404))
println(describe(listOf("a", "b", "c")))
}
when 无需 break;支持类型判断、区间、多条件合并。
循环与区间
fun main() {
// 区间 1..5 含 5
for (i in 1..5) {
print("$i ")
}
println()
// until 不含终点
for (i in 0 until 5) {
print("$i ")
}
println()
// 步长
for (i in 10 downTo 1 step 2) {
print("$i ")
}
println()
// 遍历集合
val slugs = listOf("kt-intro", "kt-syntax", "kt-control")
for ((index, slug) in slugs.withIndex()) {
println("${index + 1}. $slug")
}
}
.. 闭区间,until 左闭右开,downTo 递减,step 步长。
标签与 continue/break
fun findFirstEven(numbers: List<Int>): Int? {
loop@ for (row in listOf(numbers, listOf(1, 3, 5))) {
for (n in row) {
if (n % 2 == 0) return n
if (n < 0) break@loop
}
}
return null
}