大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
控制流
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
}
标签 @loop 可跳出外层循环,类似 Java 的 labeled break。
与 Java 对照
| Kotlin | Java |
|---|---|
if (a) x else y 作表达式 | 三元 a ? x : y |
when (x) { ... } | switch (x) { ... } |
1..10 | IntStream.rangeClosed(1, 10) |
for ((i, v) in list.withIndex()) | 传统 for + 索引 |
is String + smart cast | instanceof + cast |
练习
- 用
when实现 HTTP 状态码到中文描述的映射 - 打印 1–10 的平方(用
for与区间) - 对比 Java
switch与 Kotlinwhen的 fallthrough 行为
小结
if/when 可作表达式,区间与 smart cast 让控制流更简洁。 下一课函数与 Lambda。见 kotlin-essentials。