Kotlin 条件控制

Kotlin 条件控制(2025年中文讲解)

Kotlin 的条件控制结构用于根据条件执行不同的代码块,简洁且功能强大,相比 Java 更灵活,减少了样板代码。Kotlin 的条件控制主要包括 ifwhen(类似 Java 的 switch 但更强大)和逻辑表达式,结合空安全和类型推断,广泛用于 Android、后端(Spring Boot)和 Kotlin Multiplatform 项目。2025年,Kotlin 2.0(K2 编译器)优化了 when 性能和类型检查。本教程详细讲解 Kotlin 条件控制的语法、用法和实践,基于官方文档、CSDN 和知乎,适合初学者和开发者。建议用 Kotlin Playground(https://play.kotlinlang.org/)练习。

一、Kotlin 条件控制概览(必知)

  • 核心结构
  • if:基于布尔条件执行,支持作为表达式返回结果。
  • when:多分支选择,替代 Java 的 switch,支持任意类型和条件。
  • 特点
  • 表达式化ifwhen 可返回值,减少代码嵌套。
  • 空安全集成:与 ?.?: 等结合,处理可空类型。
  • 简洁:无需冗长 casebreakwhen 自动处理)。
  • 2025年趋势:Kotlin 2.0 优化 when 的编译速度,Android 开发中 when 结合 Jetpack Compose 更常见。

二、核心语法与用法(必会)

以下按 ifwhen 分模块讲解,包含代码示例,直接可运行。

1. if 语句
  • 基本用法:类似 Java,但支持作为表达式返回结果。
  fun main() {
      val a = 10
      val b = 5
      if (a > b) {
          println("a is greater")
      } else {
          println("b is greater or equal")
      }
  }
  // 输出:a is greater
  • 作为表达式if 可直接返回值,替代三元运算符(Kotlin 无三元运算符)。
  fun max(a: Int, b: Int) = if (a > b) a else b
  fun main() {
      println(max(10, 5)) // 输出:10
  }
  • 多条件:支持 else if,表达式形式更简洁。
  fun grade(score: Int) = if (score >= 90) {
      "A"
  } else if (score >= 80) {
      "B"
  } else {
      "C"
  }
  fun main() {
      println(grade(85)) // 输出:B
  }
  • 空安全结合
  fun checkLength(str: String?) = if (str != null) str.length else 0
  fun main() {
      val text: String? = null
      println(checkLength(text)) // 输出:0
  }
2. when 语句
  • 基本用法:替代 Java switch,支持任意类型匹配,无需 break
  fun describe(number: Int) = when (number) {
      1 -> "One"
      2 -> "Two"
      else -> "Other"
  }
  fun main() {
      println(describe(1)) // 输出:One
      println(describe(5)) // 输出:Other
  }
  • 多值匹配:用逗号或 in 范围匹配。
  fun checkValue(x: Int) = when (x) {
      0, 1 -> "Zero or One"
      in 2..10 -> "Small number"
      !in 20..30 -> "Not in 20-30"
      else -> "Large number"
  }
  fun main() {
      println(checkValue(5)) // 输出:Small number
      println(checkValue(25)) // 输出:Not in 20-30
  }
  • 类型检查:用 is 判断类型,自动转换(智能转换)。
  fun describeType(obj: Any) = when (obj) {
      is String -> "String with length ${obj.length}"
      is Int -> "Integer: $obj"
      is Double -> "Double: $obj"
      else -> "Unknown type"
  }
  fun main() {
      println(describeType("Hello")) // 输出:String with length 5
      println(describeType(42)) // 输出:Integer: 42
  }
  • 无参数 when:直接用条件表达式。
  fun checkTime(hour: Int) = when {
      hour < 12 -> "Morning"
      hour < 18 -> "Afternoon"
      else -> "Evening"
  }
  fun main() {
      println(checkTime(15)) // 输出:Afternoon
  }
3. 逻辑运算符
  • 运算符&&(与)、||(或)、!(非),与 Java 一致。
  fun canVote(age: Int, hasId: Boolean) = if (age >= 18 && hasId) {
      "Eligible to vote"
  } else {
      "Not eligible"
  }
  fun main() {
      println(canVote(20, true)) // 输出:Eligible to vote
      println(canVote(16, true)) // 输出:Not eligible
  }

三、实践示例(综合应用)

以下是结合 Android 和命令行的示例,展示条件控制的实际用途。

  1. 命令行示例(简单评分系统)
   fun main() {
       print("Enter score (0-100): ")
       val score = readLine()?.toIntOrNull() ?: 0
       val grade = when {
           score >= 90 -> "A"
           score >= 80 -> "B"
           score >= 70 -> "C"
           score >= 60 -> "D"
           else -> "F"
       }
       println("Grade: $grade")
   }
  • 输入 85,输出:Grade: B
  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)
           var isOn = false
           button.setOnClickListener {
               isOn = !isOn
               textView.text = when (isOn) {
                   true -> "Switch ON"
                   false -> "Switch OFF"
               }
           }
       }
   }
  • 布局(res/layout/activity_main.xml):
    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="Switch OFF" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Toggle" /> </LinearLayout>
  • 功能:点击按钮切换 TextView 显示 “ON” 或 “OFF”。

四、注意事项与最佳实践

  1. 优先用表达式
  • ifwhen 作为表达式可减少代码嵌套:
    kotlin val result = if (a > b) "Greater" else "Lesser"
  1. when 优于 if
  • 多分支场景用 when,更简洁且支持复杂条件。
  • 确保 when 覆盖所有情况(或用 else),避免编译错误。
  1. 空安全结合
  • 处理可空类型时,优先用 ?.?:
    kotlin val length = str?.length ?: -1
  1. 性能优化
  • when 在 Kotlin 2.0 编译为高效字节码,但大量分支(100+)可能影响性能,考虑拆分逻辑。
  1. 2025年趋势
  • Jetpack Compose:条件控制常用于 UI 状态切换(如 if 控制 Composable 显示)。
  • KMP:跨平台项目中,when 用于平台特定逻辑(如 Android vs iOS)。
  • AI 辅助:IntelliJ 的 Codeium 插件可自动生成条件代码,提速 30%。

五、学习建议

  • 练习:用 Kotlin Playground 实践 ifwhen,写评分或状态切换程序。
  • 资源
  • 官方文档:https://kotlinlang.org/docs/control-flow.html
  • B站:尚硅谷 Kotlin 教程(免费,覆盖条件控制)。
  • CSDN:搜索“Kotlin 条件控制”。
  • 时间:1-2 天掌握 ifwhen,1 周熟悉与 Android 的结合。
  • 实践:开发小型 App(如开关切换、成绩计算器)。

六、总结

Kotlin 条件控制必知 ifwhen 的表达式特性,必会多分支逻辑、空安全结合和类型检查。2025年,Kotlin 2.0 优化了 when 性能,广泛用于 Android(Compose)和 KMP 项目。相比 Java,Kotlin 条件控制更简洁、灵活,适合快速开发。掌握后可轻松处理状态管理和 UI 逻辑。

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

类似文章

发表回复

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