Kotlin 循环控制
Kotlin 循环控制(2025年中文讲解)
Kotlin 的循环控制结构用于重复执行代码块,简洁且灵活,相比 Java 减少了样板代码,同时结合空安全和函数式编程特性,广泛应用于 Android、后端(Spring Boot)和 Kotlin Multiplatform 项目。Kotlin 提供三种主要循环结构:for
、while
和 do-while
,并支持循环控制语句(如 break
、continue
)。2025年,Kotlin 2.0(K2 编译器)优化了循环性能,特别在 Android Jetpack Compose 和 KMP 项目中应用广泛。本教程详细讲解 Kotlin 循环控制的语法、用法和实践,基于官方文档、CSDN 和知乎,适合初学者和开发者。建议用 Kotlin Playground(https://play.kotlinlang.org/)练习。
一、Kotlin 循环控制概览(必知)
- 核心结构:
for
:用于遍历集合、数组或范围,类似 Java 的增强for
循环。while
:基于条件循环,适合不确定循环次数的场景。do-while
:至少执行一次,条件后置检查。- 控制语句:
break
:跳出循环。continue
:跳过当前迭代。- 标签(label):用于控制嵌套循环。
- 特点:
- 简洁:
for
支持范围表达式(如1..10
),无需显式计数器。 - 函数式支持:结合
forEach
等高阶函数,减少传统循环。 - 空安全:循环中可无缝处理可空类型。
- 2025年趋势:Kotlin 2.0 优化循环编译效率,Android 开发中
forEach
和for
结合 Jetpack Compose 更常见,KMP 项目强调跨平台一致性。
二、核心语法与用法(必会)
以下按循环类型讲解,包含代码示例,直接可运行。
1. for 循环
- 基本用法:遍历范围、数组或集合,无需显式迭代器。
fun main() {
// 遍历范围
for (i in 1..5) { // 闭区间 [1,5]
print("$i ") // 输出:1 2 3 4 5
}
}
- 范围操作:
1..5
:闭区间 [1,5]。1 until 5
:半开区间 [1,4]。step
:步长。downTo
:降序。
fun main() {
// 半开区间
for (i in 1 until 5) {
print("$i ") // 输出:1 2 3 4
}
println()
// 步长
for (i in 1..10 step 2) {
print("$i ") // 输出:1 3 5 7 9
}
println()
// 降序
for (i in 5 downTo 1) {
print("$i ") // 输出:5 4 3 2 1
}
}
- 遍历集合/数组:
fun main() {
val list = listOf("Apple", "Banana", "Orange")
for (fruit in list) {
print("$fruit ") // 输出:Apple Banana Orange
}
println()
// 带索引
for ((index, fruit) in list.withIndex()) {
println("Index $index: $fruit")
}
// 输出:
// Index 0: Apple
// Index 1: Banana
// Index 2: Orange
}
- 函数式替代:
forEach
更简洁,常用于 Android。
fun main() {
listOf(1, 2, 3).forEach { print("$it ") } // 输出:1 2 3
}
2. while 循环
- 基本用法:基于条件重复,适合动态条件。
fun main() {
var i = 1
while (i <= 5) {
print("$i ") // 输出:1 2 3 4 5
i++
}
}
- 空安全结合:
fun main() {
var input: String? = readLine()
while (input != null && input != "quit") {
println("You entered: $input")
input = readLine()
}
}
3. do-while 循环
- 基本用法:至少执行一次,条件后置检查。
fun main() {
var count = 0
do {
print("$count ") // 输出:0
count++
} while (count < 0) // 条件不满足,仅执行一次
}
4. 循环控制语句
- break:终止循环。
fun main() {
for (i in 1..10) {
if (i == 5) break
print("$i ") // 输出:1 2 3 4
}
}
- continue:跳过当前迭代。
fun main() {
for (i in 1..5) {
if (i % 2 == 0) continue
print("$i ") // 输出:1 3 5
}
}
- 标签(label):控制嵌套循环。
fun main() {
outer@ for (i in 1..3) {
for (j in 1..3) {
if (i == 2 && j == 2) break@outer
print("($i,$j) ") // 输出:(1,1) (1,2) (1,3)
}
}
}
三、实践示例(综合应用)
以下是结合命令行和 Android 的示例,展示循环控制的实际用途。
- 命令行示例(打印星号三角形):
fun main() {
val rows = 5
for (i in 1..rows) {
// 打印空格
for (j in 1..rows - i) {
print(" ")
}
// 打印星号
for (j in 1..i) {
print("* ")
}
println()
}
}
输出:
*
* *
* * *
* * * *
* * * * *
- Android 示例(动态列表更新):
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val button: Button = findViewById(R.id.button)
val textView: TextView = findViewById(R.id.textView)
val numbers = listOf(1, 2, 3, 4, 5)
button.setOnClickListener {
var result = ""
numbers.forEach { num ->
if (num % 2 == 0) result += "$num "
}
textView.text = "Even numbers: $result"
}
}
}
布局(res/layout/activity_main.xml
):
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Press button" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Show Evens" />
</LinearLayout>
功能:点击按钮显示偶数(2 4)。
四、注意事项与最佳实践
- 优先 forEach:
- 集合操作用
forEach
、map
等函数式方法,代码更简洁:kotlin listOf(1, 2, 3).forEach { println(it) }
- 范围优化:
- 用
until
替代..<
,更直观:kotlin for (i in 0 until 5) { } // 等价于 0..4
- 空安全:
- 循环中检查可空集合:
kotlin val list: List<String>? = null list?.forEach { println(it) } // 安全遍历
- 性能注意:
- 大量循环(10万+次)用
for
或while
,避免forEach
的 lambda 开销。 - Kotlin 2.0 优化了范围循环(
1..n
)的字节码,性能接近 Java。
- 2025年趋势:
- Jetpack Compose:循环用于动态 UI(如
LazyColumn
遍历列表)。 - KMP:跨平台项目中,循环逻辑需兼容 Android/iOS。
- AI 辅助:IntelliJ 的 Codeium 插件可自动生成循环代码。
五、学习建议
- 练习:用 Kotlin Playground 实践
for
、while
,写三角形或过滤程序。 - 资源:
- 官方文档:https://kotlinlang.org/docs/control-flow.html#for-loops
- B站:尚硅谷 Kotlin 教程(免费,包含循环)。
- CSDN:搜索“Kotlin 循环控制”。
- 时间:1-2 天掌握循环,1 周熟悉 Android 结合。
- 实践:开发小型 App(如动态列表、计数器)。
六、总结
Kotlin 循环控制必知 for
(范围/集合)、while
、do-while
和控制语句,必会遍历、条件跳出和标签使用。2025年,Kotlin 2.0 提升循环性能,Android 和 KMP 项目中 forEach
和 for
常见。相比 Java,Kotlin 循环更简洁、支持函数式编程,适合快速开发。
如果需要具体场景代码(如 Compose 列表)或有问题,告诉我,我可以提供更详细解答!