when 关键字是一个有返回值的表达式,也就是它可以返回一个值。下面说说它的各种用法。

when处理枚举类

在Java中我们一般使用 switch 来处理枚举类,比如我想对每一种枚举值返回一个结果,就可以使用switch来处理。这种处理的需求在Kotlin中使用 when 关键字来完成。下面是具体的代码。

Kotlin枚举类

enum class ColorEnum(val r: Int, val g: Int, val b: Int, val colorName: String){
    RED(255, 255, 255, "红色"), GREEN(0, 255, 0, "绿色"),
    BLUE(0, 0, 255, "蓝色");

Java使用switch处理枚举类

public int getValue(ColorEnum colorEnum){
    int value = 0;
    switch (colorEnum){
        case RED:
            value = 1;
            break;
        case BLUE:
            value = 2;
            break;
        case GREEN:
            value = 3;
            break;
    return value;

Kotlin使用when处理枚举类

fun getValue(colorEnum: ColorEnum) = 
    when(colorEnum){
        ColorEnum.RED -> 1;
        ColorEnum.BLUE -> 2;
        ColorEnum.GREEN -> 3;

是不是简洁了很多,当枚举常量匹配时,返回对应的箭头后面的值。由于这里when是表达式,有返回值。同时这里的类型推导也可以让我们不需要显式指定函数返回值类型。
同时上面的代码不需要写break,当我们需要多个匹配项目返回同一个值时,我们可以这样写。

Kotlin多个匹配项目返回同一个值

fun getValue2(colorEnum: ColorEnum) =
    when(colorEnum){
        ColorEnum.RED, ColorEnum.BLUE -> 1;
        ColorEnum.GREEN -> 3;

when匹配任意对象

Java中的switch的分支条件必须是枚举常量字符串数字值。而Kotlin中的when可以使用任何对象,我们这里举一个简单的颜色混合的例子来说明。

Kotlin代码

fun mix(color1: ColorEnum, color2: ColorEnum) =
        when(setOf<ColorEnum>(color1, color2)){
            setOf(ColorEnum.RED, ColorEnum.GREEN) -> "黄色"
            setOf(ColorEnum.RED, ColorEnum.BLUE) -> "紫色"
            setOf(ColorEnum.BLUE, ColorEnum.GREEN) -> "黑色"
            else -> throw Exception("不知道什么颜色")

上面的例子中的setOf()对应于Java里面的Set集合,它也是不关注其中元素的顺序。所以上面的枚举匹配时也不会关注于元素的顺序,只要其中的元素是匹配的即可。else分支等同于switch里面的default分支,当与所有项都不匹配时执行。

不带参数的when

我们注意到,上面的对象在比较时,必须要创建额外的集合对象,这在性能上会有一定的损失,这里我们使用另外一种方法实现上面同样的功能,同时避免额外的对象创建。

Kotlin代码

fun mix2(color1: ColorEnum, color2: ColorEnum) =
        when{
            (color1 == ColorEnum.RED && color2 == ColorEnum.GREEN) ||
            (color1 == ColorEnum.GREEN && color2 == ColorEnum.RED) -> "黄色"
            (color1 == ColorEnum.RED && color2 == ColorEnum.BLUE) ||
            (color1 == ColorEnum.BLUE && color2 == ColorEnum.RED) -> "紫色"
            (color1 == ColorEnum.BLUE && color2 == ColorEnum.GREEN) || 
            (color1 == ColorEnum.GREEN && color2 == ColorEnum.BLUE) -> "黑色"
            else -> throw Exception("不知道什么颜色")

虽然代码量有所增加,可读性也好像变差了一些,但是少了对象的创建,性能有所提升。

上面的例子看出Kotlin的设计理念就是简洁明了,用更少的代码做更多的事,后续我们还会提到when关键字的其他使用场景。

今天,我们来学习一下Kotlin的when关键字。when关键字是一个有返回值的表达式,也就是它可以返回一个值。下面说说它的各种用法。when处理枚举类在Java中我们一般使用switch来处理枚举类,比如我想对每一种枚举值返回一个结果,就可以使用switch来处理。这种处理的需求在Kotlin中使用when关键字来完成。
地址:http://kotlinlang.org/docs/reference/control-flow.html 日期:2017年 05月 28日 星期日 译者:LinkyIf 表达式在 Kotlin 中,if 是一个表达式,也就是说,它返回一个值。所以不存在三元操作符号(condition ? then : else), 因为一个 if 语句可以实现这个功能。// 传统用法 var max
if条件语句 Kotlin 提供了几种实现条件逻辑的机制,其中最常见的是 if-else 语句。如果 if 关键字后面括在圆括号内的表达式求值为 true,则会执行该分支中的代码(即,紧跟在后面的括在大括号内的代码)。否则,会执行 else 分支中的代码 if (x == 2) { println("x等于2") } else { println("x不等于2") 在 Kotlin 中,if是一个表达式,即它会返回一个值。 因此就不需要三元运算符(条
Kotlin 的 when 类似于 Java 的 switch 。 用 if 写的话,是这样的, fun getStudentScore(name: String) = if (name == "James") { } else if (name == "Wade") { } else if (name == "Harden") { } else { Kotlin判断字符是否相等可以直接用 == 。 当判断条件比较多时,适合用 when ,上
程序的执行语句分为3种: 顺序语句条件语句,循环语句; 顺序语句就是代码一行一行的往下执行就行了; Kotlin条件语句主要有两种实现方式:if 和 when; if条件语句: fun largerNumber(num1: Int, num2: Int): Int { var value = 0//value 使用var 关键字来声明,因为value需要改变值; //这个if 和 else if else 和java一样进行判断 if (num1 > num2) {
提到 when,大家都会联想到 Java 中的 switch,然而在 kotlin 中,when 显然比 Java 中的 switch 要强大得多。首先,我们先来看看 when 的特点: 它可以作为表达式使用 使用更加安全 强大灵活的分支结构 可以不带参数 接下来,我来带大家逐步领略这些特点。以下面这段 Java 功能代码为例: switch(animal) { case EAGLE:...
提到 when,大家都会联想到 Java 中的 switch,然而在 kotlin 中,when 显然比 Java 中的 switch 要强大得多。首先,我们先来看看 when 的特点: 它可以作为表达式使用 使用更加安全 强大灵活的分支结构 可以不带参数 接下来,我来带大家逐步领略这些特点。以下面这段 Java 功能代码为例: switch(animal) { case EAGLE:...
Kotlin Camera是基于Kotlin编程语言开发的一个用于Android平台的相机框架。相机是手机上常用的功能之一,而相机框架则是开发者需要使用的工具之一。Kotlin Camera优点在于它的开发语言Kotlin极大地提高了代码的易读性和可维护性,其次,它提供了一个简单易用的API,可以轻松地实现相机的基本功能,如拍照、录像、预览等。Kotlin Camera还提供了多种参数配置,如拍摄分辨率、画质等,以及预览尺寸、缩放比例等,使开发者可以根据自己的需求灵活地配置相机。此外,Kotlin Camera还支持自定义相机界面和操作逻辑,方便开发者编写符合自己APP风格的相机应用。总之,Kotlin Camera为开发者提供了一个快速开发相机应用的最佳框架,让相机应用开发变得更加简单。