Kotlin中的When表达式就是java中的switch case语句
我们在java中这样写switch case语句
int day =1;
switch (day){
case 1:
Log.d(TAG, "test: 周一吃包子");
break;
case 2:
Log.d(TAG, "test: 周二吃肉夹馍");
break;
case 3:
Log.d(TAG, "test: 周三吃鸡蛋灌饼");
break;
case 4:
case 5:
Log.d(TAG, "test:这两天吃油条");
break;
default:
Log.d(TAG, "test: 看心情随便吃");
break;
}
而在Kotlin中,我们使用When表达式代替
var a=10
when(a){
1-> Log.d(TAG, "test: 周一吃包子")
2-> Log.d(TAG, "test: 周二吃肉夹馍")
3-> Log.d(TAG, "test: 周三吃鸡蛋灌饼")
4,5-> Log.d(TAG, "test: 这两天吃油条")
else -> Log.d(TAG, "test: 看心情随便吃")
}
When表达式也是有返回值的
var a=10
var b = when(a){
1-> "奔波儿霸"
2-> "霸波儿奔"
4,5-> "奔波儿霸和霸波儿奔"
else ->""
}
When表达式的每个分支也可以跟代码块,该代码块的最后一个表达式就是该表达式的值
var a=10
var b = when(a){
1-> {
//此处省略一千行代码
"奔波儿霸"}
2-> "霸波儿奔"
else ->{
// 此处省略一千行代码
"奔波儿霸和霸波儿奔"
}
}
可以看到,在When表达式中,代码块和表达式可以混合使用
When表达式的分支条件也可以是一个表达式
var a=10
var b = when(a){
"10".toInt()-> "奔波儿霸"
2-> "霸波儿奔"
else ->"奔波儿霸和霸波儿奔"
}
When表达式的分支条件还可以检查一个值在/不在一个区间中
var a=10
var b = when(a){
//在1-10区间
in 1..10-> "奔波儿霸"
//不在30 - 50 区间
!in 30..50-> "霸波儿奔"
else ->"奔波儿霸和霸波儿奔"
}
When表达式的分支条件还可以用作判断
var a:Any= Object()
var b = when(a){
//是String类型
a is String-> "奔波儿霸"
//是 Int类型
a is Int -> 10
//是Boolean类型
a is Boolean -> true
//否则
else -> null
}
各种类型的表达式还可以混合使用
var a:Any= Object()
var b = when(a){
//判断
a is String-> "奔波儿霸"
//区间
in 0..10-> 10
//普通表达式
"10".toInt() -> true
//否则
else -> null
}
不管你激动不激动,反正我很激动