Kotlin基础之 When表达式

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
      }

不管你激动不激动,反正我很激动

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。