when
在Java中是循环语句,但在Kotlin中它代表的可不是循环语句,而是和Java中的switch case
有着一样功能的条件语句,下面我们来看下when
在Kotlin中的具体用法吧。
when
的普通用法和switch
一样:
fun log(str: String) {
when (str) {
"0" -> print("数字0")
"A" -> print("字母A")
}
}
我们都知道在Java中switch
语句的分支条件必须是常量,那Kotlin的when
语句是不是也有一样的限制呢?答案显然是没有限制,下面就给大家列出when
可以做到但switch
做不到的功能吧。
-
when
的分支条件可以为任意表达式
示例1:
fun log(any: Any) {
when (any) {
//分支条件为常量
"1" -> print("输入的内容为数字1")
//分支条件为boolean值
is String -> print("输入的内容是String类型的任意变量")
//分支条件为集合
setOf("0", "A") -> print("输入的内容是数字0和字母A的集合")
//分支条件为枚举类中常量的字段
Person.Dad.personName -> print("输入的内容是枚举类Person中变量Dad的姓名")
}
}
通过示例1我们可以看到,when
可以接收任意表达式为分支条件,而switch
只能接收常量为分支条件,显然when
语句在功能实现上会大大提高我们的效率和代码可读性。
-
when
可以不带任何参数
示例2:
fun log(any: Any) {
when {
any is Int -> print("输入的内容是Int类型的任意变量")
any is String -> print("输入的内容是String类型的任意变量")
}
}
通过示例2我们可以看到,when
语句是可以不带任何参数的,但要注意的一点是,当when
语句无参时,分支条件必须
是任意的boolean表达式。
看完了when
表达式的条件判断功能,接下来我们再看下它的其它功能。以上的示例,分支体都只是一句代码,但当我们分支逻辑复杂的时候,我们肯定是要使用代码块作为分支体的,那么当分支体是代码块的时候,又会有什么不同呢?
fun log(num: Int): Int = when {
num < 0 -> abs(num)
num < 10 -> num + 2
else -> {
print("当前值大于10,需返回")
num * 2
}
}
在这里我们可以看到,当代码块作为分支体的情况下,代码块中的最后一个表达式就是返回结果,这里告诉大家一个规则——"代码块最后的表达式就是结果",在所有使用代码块并期望得到一个结果的地方都是成立的,我们会在后面函数相关的文章中和大家再深入的探讨一下这个规则。
以上就是when
表达式在Kotlin中的具体使用了,如果有什么不懂的地方,你可以...再读一遍! 下篇文章见,我是小院里栽颗树~~
网友评论