Kotlin 条件控制
Kotlin 条件控制(2025年中文讲解)
Kotlin 的条件控制结构用于根据条件执行不同的代码块,简洁且功能强大,相比 Java 更灵活,减少了样板代码。Kotlin 的条件控制主要包括 if
、when
(类似 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
,支持任意类型和条件。- 特点:
- 表达式化:
if
和when
可返回值,减少代码嵌套。 - 空安全集成:与
?.
、?:
等结合,处理可空类型。 - 简洁:无需冗长
case
或break
(when
自动处理)。 - 2025年趋势:Kotlin 2.0 优化
when
的编译速度,Android 开发中when
结合 Jetpack Compose 更常见。
二、核心语法与用法(必会)
以下按 if
和 when
分模块讲解,包含代码示例,直接可运行。
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 和命令行的示例,展示条件控制的实际用途。
- 命令行示例(简单评分系统):
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
。
- 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”。
四、注意事项与最佳实践
- 优先用表达式:
if
和when
作为表达式可减少代码嵌套:kotlin val result = if (a > b) "Greater" else "Lesser"
- when 优于 if:
- 多分支场景用
when
,更简洁且支持复杂条件。 - 确保
when
覆盖所有情况(或用else
),避免编译错误。
- 空安全结合:
- 处理可空类型时,优先用
?.
和?:
:kotlin val length = str?.length ?: -1
- 性能优化:
when
在 Kotlin 2.0 编译为高效字节码,但大量分支(100+)可能影响性能,考虑拆分逻辑。
- 2025年趋势:
- Jetpack Compose:条件控制常用于 UI 状态切换(如
if
控制 Composable 显示)。 - KMP:跨平台项目中,
when
用于平台特定逻辑(如 Android vs iOS)。 - AI 辅助:IntelliJ 的 Codeium 插件可自动生成条件代码,提速 30%。
五、学习建议
- 练习:用 Kotlin Playground 实践
if
和when
,写评分或状态切换程序。 - 资源:
- 官方文档:https://kotlinlang.org/docs/control-flow.html
- B站:尚硅谷 Kotlin 教程(免费,覆盖条件控制)。
- CSDN:搜索“Kotlin 条件控制”。
- 时间:1-2 天掌握
if
和when
,1 周熟悉与 Android 的结合。 - 实践:开发小型 App(如开关切换、成绩计算器)。
六、总结
Kotlin 条件控制必知 if
和 when
的表达式特性,必会多分支逻辑、空安全结合和类型检查。2025年,Kotlin 2.0 优化了 when
性能,广泛用于 Android(Compose)和 KMP 项目。相比 Java,Kotlin 条件控制更简洁、灵活,适合快速开发。掌握后可轻松处理状态管理和 UI 逻辑。
如果需要具体场景代码(如 Compose 示例)或有问题,告诉我,我可以提供更详细解答!