
1. 引言Kotlin 作為現代 JVM 語言在條件控制方面提供了比 Java 更簡潔、更安全的語法。無論是傳統的if分支還是強大的when表達式Kotlin 都強調「表達式化」——幾乎所有控制結構都可以返回值。本文將通過豐富的代碼實例系統講解 Kotlin 條件控制的核心用法與實戰技巧。2. if 表達式從語句到表達式在 Kotlin 中if不再是單純的語句而是一個可以返回值的表達式。這意味著你可以直接把if的結果賦給變量從而寫出更簡潔、更函數式的代碼。2.1 傳統 if 用法先看最基礎的寫法與 Java 類似fun checkNumber(num: Int) { if (num 0) { println($num 是正數) } else if (num 0) { println($num 是負數) } else { println($num 是零) } } fun main() { checkNumber(10) checkNumber(-5) checkNumber(0) }2.2 if 作為表達式返回值Kotlin 的if可以直接返回分支結果省去臨時變量fun maxOf(a: Int, b: Int): Int { return if (a b) a else b } // 更簡潔的寫法直接作為表達式體 fun maxOf2(a: Int, b: Int) if (a b) a else b fun main() { println(maxOf(3, 7)) // 輸出 7 println(maxOf2(9, 2)) // 輸出 9 }2.3 if 表達式與字符串模板結合利用表達式返回值可以寫出非常緊湊的業務邏輯fun describe(score: Int): String { return if (score 90) { 優秀 } else if (score 60) { 及格 } else { 不及格 } } fun main() { val score 85 println(成績$score等級${describe(score)}) }3. when 表達式Kotlin 的 switch 升級版when是 Kotlin 中最強大的條件控制結構它取代了 Java 的switch但功能遠超后者。它既可以作為語句也可以作為表達式返回值還支持多種匹配模式。3.1 基礎用法替代 switchfun getDayName(day: Int): String { return when (day) { 1 - 星期一 2 - 星期二 3 - 星期三 4 - 星期四 5 - 星期五 6 - 星期六 7 - 星期日 else - 無效的日期 } } fun main() { println(getDayName(3)) // 輸出 星期三 println(getDayName(9)) // 輸出 無效的日期 }3.2 多條件合并匹配多個值可以合并到同一個分支用逗號分隔fun isWeekend(day: Int): Boolean { return when (day) { 1, 2, 3, 4, 5 - false 6, 7 - true else - throw IllegalArgumentException(無效日期$day) } } fun main() { println(isWeekend(6)) // 輸出 true println(isWeekend(3)) // 輸出 false }3.3 區間匹配when可以直接使用區間Range進行范圍判斷fun classifyAge(age: Int): String { return when (age) { in 0..12 - 兒童 in 13..17 - 青少年 in 18..59 - 成年人 in 60..150 - 老年人 else - 年齡超出合理范圍 } } fun main() { println(classifyAge(8)) // 輸出 兒童 println(classifyAge(25)) // 輸出 成年人 println(classifyAge(70)) // 輸出 老年人 }3.4 類型匹配智能轉換when可以結合類型檢查自動完成智能轉換這是處理多態對象的利器sealed class Shape data class Circle(val radius: Double) : Shape() data class Rectangle(val width: Double, val height: Double) : Shape() data class Triangle(val base: Double, val height: Double) : Shape() fun calculateArea(shape: Shape): Double { return when (shape) { is Circle - Math.PI * shape.radius * shape.radius is Rectangle - shape.width * shape.height is Triangle - 0.5 * shape.base * shape.height } } fun main() { val shapes listOf( Circle(2.0), Rectangle(3.0, 4.0), Triangle(6.0, 2.0) ) shapes.forEach { println(面積${calculateArea(it)}) } }3.5 不帶參數的 when當分支條件較復雜時可以省略when的參數每個分支寫完整的布爾表達式fun recommendAction(temp: Double): String { return when { temp 0 - 天氣寒冷注意保暖 temp 15 - 天氣涼爽建議穿外套 temp 28 - 溫度適宜適合戶外活動 temp 35 - 天氣炎熱注意防暑 else - 高溫預警減少外出 } } fun main() { println(recommendAction(-3.0)) // 天氣寒冷注意保暖 println(recommendAction(22.0)) // 溫度適宜適合戶外活動 println(recommendAction(38.0)) // 高溫預警減少外出 }4. 條件控制與集合操作結合在實際開發中條件控制經常與集合操作配合使用實現數據過濾、分組等需求。4.1 使用 filter 與條件表達式data class Product(val name: String, val price: Double, val stock: Int) fun main() { val products listOf( Product(手機, 2999.0, 50), Product(耳機, 399.0, 200), Product(筆記本, 6999.0, 10), Product(鼠標, 99.0, 0) ) // 篩選有庫存且價格低于 1000 的商品 val affordable products.filter { it.stock 0 it.price 1000 } println(可購買且價格低于 1000 的商品) affordable.forEach { println( ${it.name} - ¥${it.price}) } }4.2 使用 when 進行分組fun priceLevel(price: Double): String { return when { price 100 - 低價 price 1000 - 中價 else - 高價 } } fun main() { val products listOf( Product(手機, 2999.0, 50), Product(耳機, 399.0, 200), Product(鼠標, 99.0, 0) ) val grouped products.groupBy { priceLevel(it.price) } grouped.forEach { (level, items) - println($level 商品${items.joinToString { it.name }}) } }5. 實戰案例模擬登錄校驗綜合運用if和when實現一個帶輸入校驗的登錄模擬程序data class User(val username: String, val password: String) fun validateInput(username: String, password: String): String { return when { username.isBlank() - 用戶名不能為空 password.length 6 - 密碼長度不能少于 6 位 password.any { it.isDigit() }.not() - 密碼必須包含數字 else - 輸入校驗通過 } } fun login(user: User, inputName: String, inputPwd: String): String { val validation validateInput(inputName, inputPwd) if (validation ! 輸入校驗通過) { return validation } return if (user.username inputName user.password inputPwd) { 登錄成功歡迎 ${user.username} } else { 用戶名或密碼錯誤 } } fun main() { val admin User(admin, abc123) println(login(admin, admin, abc123)) // 登錄成功 println(login(admin, admin, 123)) // 密碼長度不能少于 6 位 println(login(admin, admin, abcdef)) // 密碼必須包含數字 println(login(admin, guest, abc123)) // 用戶名或密碼錯誤 }6. 總結Kotlin 的條件控制設計充分體現了「簡潔、安全、表達力強」的語言哲學if 表達式可以直接返回值替代傳統三元運算符代碼更直觀。when 表達式功能遠超 Java 的 switch支持多值合并、區間匹配、類型匹配和復雜布爾條件。智能轉換結合類型檢查讓多態分支處理更加安全優雅。與集合結合條件控制與函數式集合操作配合能寫出聲明式、易維護的業務代碼。建議讀者在真實項目中多嘗試用when替代冗長的if-else鏈并充分利用表達式返回值特性讓代碼更加簡潔清晰。