when函数c语⾔,when表达式
### when条件语句
when表达式类似于 switch-case 表达式。when取代了类 C 语⾔的 switch 操作符,when会对所有的分⽀进⾏检查直到有⼀个条件满⾜。但相⽐switch⽽⾔,when语句要更加的强⼤,灵活。
* 给定条件
* 满⾜什么条件执⾏什么任务
**⽰例如下**
```
package B流控语句
fun main(args: Array) {
var x = 0
when (x) {
//是否是Int类型
is Int -> println("${x}是Int类型")
//是否是0或者1
0, 1 -> println("${x}不是0,就是1")
//是否在[0,10]区间
in 0..10 -> println("${x}在[0,10]")
//是否不在[0,10]区间
!in 0..10 -> println("${x}不在[0,10]区间")
//是否是1
1 -> println("${x}是1")
//是否是2
2 -> println("${x}是2")
//如果都不满⾜
else -> println("所有情况都不满⾜")
}
testWhen(1)
}
fun testWhen(obj: Any) {
when (obj) {
1 -> print("第⼀项")
"hello" -> print("这个是字符串hello")
is Long -> print("这是⼀个Long类型数据")
is Int -> print("这是⼀个Int类型数据")
!is String -> print("这不是String类型的数据")
else -> print("else类似于Java中的default")
}
}
```
运⾏结果
```
0是Int类型
第⼀项
Process finished with exit code 0
```
* when 将它的参数与所有的分⽀条件顺序⽐较,直到某个分⽀满⾜条件。
* when 既可以被当做表达式使⽤也可以被当做语句使⽤。
* 如果它被当做表达式, 符合条件的分⽀的值就是整个表达式的值,
* 如果当做语句使⽤, 则忽略个别分⽀的值。(像 if ⼀样,每⼀个分⽀可以是⼀个代码块,它的值是块中最后的表达式的值。) * 如果很多分⽀需要⽤相同的⽅式处理,则可以把多个分⽀条件放在⼀起,⽤逗号分隔:
```
when (x) {
0, 1 -> print("x == 0 or x == 1")
else -> print("otherwise")
}
```
* 我们可以⽤任意表达式(⽽不只是常量)作为分⽀条件
```
when (x) {
parseInt(s) -> print("s encodes x")
else -> print("s does not encode x")
}
```
* 我们也可以检测⼀个值在(in)或者不在(!in)⼀个区间或者集合中:
```
when (x) {
in 1..10 -> print("x is in the range")
in validNumbers -> print("x is valid")
!in 10..20 -> print("x is outside the range")
else -> print("none of the above")
}
```
* 另⼀种可能性是检测⼀个值是(*is*)或者不是(*!is*)⼀个特定类型的值。
```
c++string类型fun hasPrefix(x: Any) = when(x) {
is String -> x.startsWith("prefix")
else -> false
}
```
* when也可以⽤来取代`if-else` if 链。 如果不提供参数,所有的分⽀条件都是简单的布尔表达式,⽽当⼀个分⽀的条件为真时则执⾏该分⽀:
```
when {
x.isOdd() -> print("x is odd")
x.isEven() -> print("x is even")
else -> print("x is funny")
}
```
⽰例
```
fun main(args: Array) {
var a: Int = 7
var b: Int = 8
when {
a >
b -> print("a⼤于b")
a <
b -> print("a⼩于b")
else -> print("a等于b")
}
}
```
运⾏结果
```
a⼩于b
```
* ⾃ Kotlin 1.3 以来, 可以使⽤以下语法捕获变量中的主题,变量的范围, 在主体时引⼊, 仅限于主体时。```
Body() =
when (val response = executeRequest()) {
is Success -> response.body
is HttpError -> throw HttpException(response.status)
}
```
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论