在Kotlin编程语言中,when
表达式是一种功能强大的条件控制结构,它提供了比传统的 if...else if...else
语句更为简洁和灵活的方式来处理多种情况。通过以下示例代码,我们将深入探讨Kotlin when
表达式的使用及其多功能性。
首先,让我们从两个不同的 getScore
函数入手:
fun getScore(name: String) = when (name) { "Tom" -> 86 "Jim" -> 77 "Jack" -> 95 "Lily" -> 100 else -> 0 } fun getScore2(name: String) = when { name.startsWith("Tom") -> 86 name == "Jim" -> 77 name == "Jack" -> 95 name == "Lily" -> 100 else -> 0 }
在上述代码中,when
表达式被用来根据传入的名字返回一个分数。getScore
函数直接比较字符串 name
与各个常量值,当找到匹配项时,则返回对应的分数。getScore2
函数则展示了 when
表达式的另一个特性——它可以包含复杂的布尔表达式作为分支条件。在这个例子中,我们检查输入的名字是否以特定字符串开头来决定分数。
值得注意的是,when
在这里作为一个表达式使用,因此可以直接将其赋值给函数的返回值。同时,最后的 else
分支是可选的,但通常用于提供默认行为或捕获未匹配的所有其他情况。
接下来,我们看一个针对数字类型的 checkNumber
函数:
fun checkNumber(num: Number) { when (num) { is Int -> println("Int") is Double -> println("Double") else -> println("Number is not supported") } }
在这个场景中,when
表达式用于类型检查并据此执行相应的动作。每个分支前面的 is
关键字用于检测 num
是否属于某种特定类型。当 num
是 Int
类型时,输出 “Int”;如果是 Double
类型,则输出 “Double”;若都不是,则执行 else
分支的代码,表示不支持的数字类型。
总结起来,Kotlin 的 when
表达式具有以下特点:
- 可以替代多个
if
和else if
条件判断,使得代码更清晰。 - 支持多种类型的条件测试,包括常量值、范围、模式匹配以及类型检查等。
- 当
when
用作表达式时,它可以返回一个值,无需显式的return
语句。 - 具有简化的语法,可以省略括号,并且不需要关键字如
case
或break
,因为每个分支后面跟着箭头(->)即可指示要执行的代码块。
综上所述,Kotlin 的 when
表达式是一个强大的工具,无论是在简单的枚举匹配还是复杂的状态判断中,都能有效地提升代码的可读性和编写效率。