Kotlin 循环控制

Kotlin 循环控制(2025年中文讲解)

Kotlin 的循环控制结构用于重复执行代码块,简洁且灵活,相比 Java 减少了样板代码,同时结合空安全和函数式编程特性,广泛应用于 Android、后端(Spring Boot)和 Kotlin Multiplatform 项目。Kotlin 提供三种主要循环结构:forwhiledo-while,并支持循环控制语句(如 breakcontinue)。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 开发中 forEachfor 结合 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 的示例,展示循环控制的实际用途。

  1. 命令行示例(打印星号三角形)
   fun main() {
       val rows = 5
       for (i in 1..rows) {
           // 打印空格
           for (j in 1..rows - i) {
               print(" ")
           }
           // 打印星号
           for (j in 1..i) {
               print("* ")
           }
           println()
       }
   }

输出

       * 
      * * 
     * * * 
    * * * * 
   * * * * * 
  1. 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)。

四、注意事项与最佳实践

  1. 优先 forEach
  • 集合操作用 forEachmap 等函数式方法,代码更简洁:
    kotlin listOf(1, 2, 3).forEach { println(it) }
  1. 范围优化
  • until 替代 ..<,更直观:
    kotlin for (i in 0 until 5) { } // 等价于 0..4
  1. 空安全
  • 循环中检查可空集合:
    kotlin val list: List<String>? = null list?.forEach { println(it) } // 安全遍历
  1. 性能注意
  • 大量循环(10万+次)用 forwhile,避免 forEach 的 lambda 开销。
  • Kotlin 2.0 优化了范围循环(1..n)的字节码,性能接近 Java。
  1. 2025年趋势
  • Jetpack Compose:循环用于动态 UI(如 LazyColumn 遍历列表)。
  • KMP:跨平台项目中,循环逻辑需兼容 Android/iOS。
  • AI 辅助:IntelliJ 的 Codeium 插件可自动生成循环代码。

五、学习建议

  • 练习:用 Kotlin Playground 实践 forwhile,写三角形或过滤程序。
  • 资源
  • 官方文档:https://kotlinlang.org/docs/control-flow.html#for-loops
  • B站:尚硅谷 Kotlin 教程(免费,包含循环)。
  • CSDN:搜索“Kotlin 循环控制”。
  • 时间:1-2 天掌握循环,1 周熟悉 Android 结合。
  • 实践:开发小型 App(如动态列表、计数器)。

六、总结

Kotlin 循环控制必知 for(范围/集合)、whiledo-while 和控制语句,必会遍历、条件跳出和标签使用。2025年,Kotlin 2.0 提升循环性能,Android 和 KMP 项目中 forEachfor 常见。相比 Java,Kotlin 循环更简洁、支持函数式编程,适合快速开发。

如果需要具体场景代码(如 Compose 列表)或有问题,告诉我,我可以提供更详细解答!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注