when函数c语言,when表达式

您所在的位置:网站首页 c语言中的条件语句的格式是什么 when函数c语言,when表达式

when函数c语言,when表达式

2024-07-16 07:10| 来源: 网络整理| 查看: 265

### 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 一样,每一个分支可以是一个代码块,它的值是块中最后的表达式的值。)

* 如果其他分支都不满足条件将会求值 else 分支。 **如果 when 作为一个表达式使用,则必须有 else 分支, 除非编译器能够检测出所有的可能情况都已经覆盖了**[例如,对于 [枚举(enum)类](http://www.kotlincn.net/docs/reference/enum-classes.html)条目与[密封(sealed)类](http://www.kotlincn.net/docs/reference/sealed-classes.html)子类型]。

* 如果很多分支需要用相同的方式处理,则可以把多个分支条件放在一起,用逗号分隔:

```

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*)一个特定类型的值。

>[info]注意: 由于[智能转换](http://www.kotlincn.net/docs/reference/typecasts.html#智能转换),你可以访问该类型的方法与属性而无需任何额外的检测。

```

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 以来, 可以使用以下语法捕获变量中的主题,变量的范围, 在主体时引入, 仅限于主体时。

```

fun Request.getBody() =

when (val response = executeRequest()) {

is Success -> response.body

is HttpError -> throw HttpException(response.status)

}

```



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3