Kotlin中的When表达式
如果之前有其他语言(如Java、C#等)的开发基础,那么在阅读和使用Kotlin时基本没有太大障碍,但有一个关键词是Kotlin中新出现的,那就是when。其实when并不是很难理解,把when当作switch的高级版本就可以了。其实想想switch的语法与用法,将switch换成when从语义上反而更好理解。
如果你觉得Kotlin仅仅是将switch换成when,那你就在错特错了,Kotlin大大增强的when的功能。之前在使用switch时不知有没有过疑问,在多分支时switch明明比if好用,但有时却不得不用if,因为switch的局限性比较大,switch只能对int类型的变量使用,现在Kotlin中的when完全没有这个问题,可以对任何类型的变量使用。
1 2 3 4 5 |
var strHello="Hello" when(strHello){ "Hello"->println("Hello When is perfect!") "World"->println("Good Kotlin!") } |
从上面一段代码可以看到,case也没有了,冒号变成了箭头,这些都是小变化。但用法是不是觉得眼前一亮,先不要着急,还有更好的呢!
在分支上,可以使用两个关键字,in、is和else,还有任何形式的表达式。先看下面一段代码:
1 2 3 4 5 6 7 8 9 10 |
when (x) { 1,2,3->print("multi-branch is easy") in 1..10 -> { print("Kotlin is good") 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") } |
测试这段代码得到以下输出:Kotlin is goodx is in the range。这一段代码说明了以下几个问题:
1、in的用法。
2、Kotlin虽然没有类似于break的语句,但其也只会与分支成功匹配一次,然后跳出。
3、在Kotlin中多分支匹配也很简单,只要用,分隔就可以了。
4、else替代了default。
再来看一个表达式的:
1 2 3 4 5 6 |
var strHello="Hello" var strHW="Hello World" when(strHello){ strHW.split(" ")[0]->println("Hello When is perfect!") "World"->println("Good Kotlin!") } |
好吧,我承认,这一段代码只有演示意义,实际意义不大。下面是一个is的示例:
1 2 3 4 |
fun hasPrefix(x: Any) = when(x) { is String -> x.startsWith("prefix") else -> false } |
这段代码检测任意一个变量是不是以”prefix”开关,如果不是String类型的,直接false。
when就介绍到这里,这个关键字用多了你就不想再用if/switch了。
说点什么