kotlin之when表达式

有java基础的同学知道switch case语句

  int day =1;
      switch (day){
          case 1:
              System.out.println("星期一");
              break;
          case 2:
              System.out.println("星期二");
              break;
          case 3:
              System.out.println("星期三");
              break;
          case 4:
              System.out.println("星期四");
              break;
          case 5:
              System.out.println("星期五");
              break;
          case 6:
              System.out.println("星期六");
              break;
          case 7:
              System.out.println("放假了");
              break;
          default:
              System.out.println("没有这个日子");
      }

如果用kotlin来实现,该怎么实现类似的业务呢?

When 表达式

when 将它的参数和所有的分支条件顺序比较,直到某个分支满足条件。

   when(day){
       1-> println("今天是周一")
       2-> println("今天是周二")
       3 -> println("今天是周三")
       4 -> println("今天是周四")
       5 -> println("今天是周五")
       6 -> println("今天是是周六")
       7-> println("放假了")
      else -> println("没有这个日子")
    }

发现kotlin的when 和java的 switch....case 差不多

但是也存在不同,毕竟kotlin说是综合了很多的语言的优点而应运而生的

kotlin when返回值

java的switch是没有办法直接返回值的,只能是case...或者default给switch外面的变量赋值
   String str =null;
        int day =1;
      switch (day){
          case 1:
              str="星期一";
              break;
          case 2:
              str="星期二";
              break;
          default:
              str="放假了";
      }

而kotlin

    var day=3
    var str = when(day){
        1-> "今天是周一"
        2-> "今天是周二"
        else -> "放假了"
    }

发现kotlin的when是不是更好用

when的代码块

    var str = when(day){
        1-> {
            //.............代码块
            "今天是周一"
        }
        2-> {"今天是周二"}
        else -> {"放假了"}
    }

代码块可以有很多业务逻辑,但是最后一行值必定是返回值

when的分支条件

    var str = when(day){
        "1".toInt()-> {
            //.............代码块
            "今天是周一"
        }
        2-> {"今天是周二"}
        else -> {"放假了"}
    }

由此可见when的分支可以直接是定位值也可以是某个表达式

也可以是判断条件

    var a:Any= Object()
    var st3 = when(a){
        a is Int -> 10
        a is Boolean -> true
        a is String-> "我是字符串类型"
        else -> null
    }

 

    var st4 = when(day){
        1,2,3,4,5-> {
            //.............代码块
            "今天是周一"
        }
        6,7-> {"今天是周末"}
        else -> {"没有这个日子"}
    }

 多条件分支,这种还可以用逗号分隔

when的值区间

    var str2 = when(day){
       in 1..5-> {
            //.............代码块
            "今天是上班日"
        }
       in 6..7-> {"今天是周末"}
        else -> {"没有这个日子"}
    }

 when取代 if-else if链

    var str ="6"

  var day2=  when{
        str.equals("1") ->"星期一"
        str.equals("2") ->"星期二"
        str.equals("3") ->"星期三"
        str.equals("4") ->"星期四"
        str.equals("5") ->"星期五"
        str.equals("6") ->"星期六"
        str.equals("7") ->"星期天"
        else ->"没有这个日子"
    }
    println(day2)

配合循环使用

    for (day in 1..8){  //依次去看今天是星期几
        var info = when(day){
            1->"星期一"
            2->"星期二"
            3->"星期三"
            4->"星期四"
            5->"星期五"
            6->"星期六"
            7->"星期天"
            else ->"过年了"
        }
        println(info)
    }

你可能感兴趣的:(kotlin从零开始,kotlin,java,教程,when表达式)