Kotlin 语言 when表达式的高级用法详解

Kotlin阿木 发布于 2025-06-27 13 次阅读


Kotlin 语言 When 表达式的高级用法详解

Kotlin 是一种现代化的编程语言,它旨在提高开发效率,减少样板代码,并使 Java 代码更加简洁。在 Kotlin 中,`when` 表达式是一种强大的控制流结构,它类似于 Java 中的 `switch` 语句,但提供了更多的灵活性和表达式性。本文将深入探讨 Kotlin 中 `when` 表达式的高级用法,包括模式匹配、类型检查、范围匹配、属性委托和扩展函数等。

当前的文章结构

1. 当前的文章结构

2. When 表达式基础

3. 模式匹配

4. 类型检查

5. 范围匹配

6. 属性委托

7. 扩展函数

8. 总结

1. 当前的文章结构

本文将按照以下结构展开:

- 我们将回顾 `when` 表达式的基础用法。

- 接着,我们将深入探讨 `when` 表达式中的模式匹配,包括字面量、解构、属性和函数调用等。

- 然后,我们将介绍如何使用 `when` 表达式进行类型检查。

- 随后,我们将展示如何使用 `when` 表达式进行范围匹配。

- 我们还将探讨如何利用属性委托和扩展函数来增强 `when` 表达式的功能。

- 我们将总结 `when` 表达式的高级用法,并提供一些最佳实践。

2. When 表达式基础

在 Kotlin 中,`when` 表达式可以用来替代传统的 `if-else` 语句或 `switch` 语句。它的基本语法如下:

kotlin

when (expression) {


value1 -> {


// 当 expression 等于 value1 时执行的代码块


}


value2 -> {


// 当 expression 等于 value2 时执行的代码块


}


// ...


else -> {


// 当 expression 不匹配任何值时执行的代码块


}


}


`when` 表达式可以返回一个值,就像一个函数一样。

3. 模式匹配

Kotlin 的 `when` 表达式支持模式匹配,这使得它可以处理更复杂的条件逻辑。以下是一些模式匹配的高级用法:

3.1 字面量匹配

kotlin

when (x) {


1 -> println("x is 1")


"hello" -> println("x is the string 'hello'")


is Int -> println("x is an integer")


!is String -> println("x is not a string")


else -> println("x is something else")


}


3.2 解构

Kotlin 允许在 `when` 表达式中解构对象,这使得你可以同时检查多个属性。

kotlin

data class User(val name: String, val age: Int)

when (user) {


is User -> {


when (user.age) {


in 0..20 -> println("Young")


in 21..60 -> println("Adult")


else -> println("Senior")


}


}


else -> println("Not a user")


}


3.3 属性和函数调用

你可以在 `when` 表达式中调用属性和函数。

kotlin

when (user) {


User("Alice", 30) -> println("Alice is 30")


User("Bob", age) -> println("Bob is $age")


else -> println("Unknown user")


}


4. 类型检查

`when` 表达式可以用来检查对象的类型。

kotlin

when (obj) {


is String -> println("obj is a string")


is Int -> println("obj is an integer")


else -> println("obj is neither a string nor an integer")


}


5. 范围匹配

`when` 表达式可以用来匹配数值范围。

kotlin

when (number) {


in 1..10 -> println("number is between 1 and 10")


in 11..20 -> println("number is between 11 and 20")


else -> println("number is outside the range")


}


6. 属性委托

属性委托可以与 `when` 表达式结合使用,以提供更灵活的属性访问。

kotlin

class Delegate {


var value: String = "default"


}

class User {


var name by Delegate()


}

when (user.name) {


"Alice" -> println("Name is Alice")


"Bob" -> println("Name is Bob")


else -> println("Name is unknown")


}


7. 扩展函数

扩展函数可以扩展现有类的新功能,并与 `when` 表达式结合使用。

kotlin

fun String.whenString() {


when (this) {


"hello" -> println("Hello")


"world" -> println("World")


else -> println("Unknown string")


}


}

"hello".whenString()


8. 总结

Kotlin 的 `when` 表达式是一种强大的控制流结构,它提供了丰富的模式匹配和表达式性。通过结合模式匹配、类型检查、范围匹配、属性委托和扩展函数,你可以构建出灵活且高效的代码。在编写 Kotlin 代码时,充分利用 `when` 表达式的高级用法,可以使你的代码更加简洁、易读且易于维护。

以上内容仅为概述,每个部分都可以扩展成一篇详细的文章。希望这篇文章能够帮助你更好地理解 Kotlin 中 `when` 表达式的高级用法。