Android 入门教程
控制流
本教程共 100 篇 · 第 11 篇 · 更新于 2026-07-28 · 约 7 分钟阅读
AndroidAndroid 入门教程Kotlin控制流if 表达式whenfor 循环range
11. 控制流
本节目标:掌握 Kotlin 的条件判断(if、when)和循环(for、while、range),知道它们比 Java 的 if/switch 强在哪。
if 表达式
Kotlin 的 if 既能当语句用,也能当表达式用(有返回值):
// 当语句
val score = 85
if (score >= 60) {
println("及格")
} else {
println("不及格")
}
// 当表达式
val result = if (score >= 60) "及格" else "不及格"
当表达式用时,每个分支最后一行就是返回值。这是 Java 没有的特性,能替代三元运算符(Kotlin 没有三元 ? :,因为 if 表达式够用)。
val level = if (score >= 90) {
"优秀"
} else if (score >= 60) {
"及格"
} else {
"不及格"
}
Note
- 当表达式的 if,每个分支必须有返回值,且类型要兼容。
else分支不能省。
when:升级版 switch
Kotlin 的 when 是 Java switch 的强力升级版,能匹配值、范围、类型、任意条件。
匹配值
val day = 3
val dayName = when (day) {
1 -> "周一"
2 -> "周二"
3 -> "周三"
4 -> "周四"
5 -> "周五"
6, 7 -> "周末" // 多值合并
else -> "未知"
}
匹配范围和条件
val score = 85
val grade = when {
score >= 90 -> "A"
score >= 80 -> "B"
score >= 70 -> "C"
score >= 60 -> "D"
else -> "F"
}
不传参数的 when,每个分支是独立布尔表达式,从上往下匹配,第一个为真的分支胜出。
匹配类型
fun describe(obj: Any): String = when (obj) {
is String -> "字符串,长度 ${obj.length}" // is 判断类型后自动智能转换
is Int -> "整数 $obj"
is Boolean -> if (obj) "真" else "假"
else -> "其他类型"
}
is 判断类型后,obj 在分支里自动被当作对应类型用,不用强转,这叫智能转换(Smart Cast)。
Tip
- Android 里
when用得特别多:处理点击事件、解析 Intent action、根据状态显示 UI,都比 if-else 链清爽。
for 循环
Kotlin 的 for 没有传统 C 风格的 for (int i=0; i<n; i++),统一用 for-in 遍历。
遍历区间
for (i in 1..5) {
println(i) // 1 2 3 4 5
}
for (i in 1 until 5) {
println(i) // 1 2 3 4,不含 5
}
for (i in 5 downTo 1) {
println(i) // 5 4 3 2 1,倒序
}
for (i in 1..10 step 2) {
println(i) // 1 3 5 7 9,步长 2
}
区间符号:
a..b:闭区间[a, b]。a until b:半开区间[a, b)。a downTo b:倒序从 a 到 b。step n:步长。
遍历集合
val list = listOf("A", "B", "C")
for (item in list) {
println(item)
}
// 带索引
for ((index, item) in list.withIndex()) {
println("$index: $item")
}
遍历 Map
val map = mapOf("a" to 1, "b" to 2)
for ((key, value) in map) {
println("$key = $value")
}
while 与 do-while
跟其他语言一样,Kotlin 也有 while 和 do-while:
var i = 0
while (i < 5) {
println(i)
i++
}
var j = 0
do {
println(j)
j++
} while (j < 5)
Note
- 日常开发
for-in用得多,while适合不确定循环次数的场景(读流、轮询)。
break、continue、return
for (i in 1..10) {
if (i == 3) continue // 跳过本次,继续下次
if (i == 7) break // 跳出整个循环
println(i) // 输出 1 2 4 5 6
}
标签(跳出到指定层)
嵌套循环时想跳出外层,用标签:
outer@ for (i in 1..3) {
for (j in 1..3) {
if (i == 2 && j == 2) break@outer // 跳出外层
println("$i, $j")
}
}
forEach 里的 return
forEach 是个高阶函数,里面 return 默认从 forEach 返回(相当于 continue),想从外层函数返回要用标签:
fun findFirstEven(list: List<Int>): Int {
list.forEach {
if (it % 2 == 0) return it // 从 findFirstEven 返回
}
return -1
}
Android 里的实际用法
// 处理不同通知渠道
when (channelId) {
"message" -> showMessageNotification()
"update" -> showUpdateNotification()
else -> showDefaultNotification()
}
// 根据屏幕宽度选布局
val windowSize = when {
widthDp < 600 -> "Compact"
widthDp < 840 -> "Medium"
else -> "Expanded"
}
// 遍历列表渲染 Compose
items.forEach { item ->
// 渲染每个 item
}
小结
if 能当表达式有返回值。when 是强力 switch,能匹配值、范围、类型。for-in 配合 ..、until、downTo、step 遍历区间和集合。while 用于不确定次数的循环。break/continue 能配标签跳出指定层。下一节学函数。