kotlin的“ when”表达式如何像此切换用例代码那样进行处理?

时间:2019-04-21 11:49:59

标签: kotlin switch-statement kotlin-when

int num = 100;
char c = 'a';

c = someBigTask(c);

switch (c) {
case 'a':
    num += 100;

case 'c':
    num += 10;

case 'd':
case 'e':
    num += 100;
}

我想在其他情况下通过“当”表达式来消除相同的代码,例如这种切换用例代码,但是我找不到解决方法。.


我确实喜欢这个问题:

var num = 0
when(c){
            'a' -> num += 100
            'a', 'c' -> num += 10
            'a', 'c', 'd', 'e' -> num += 100
            else -> 0
        }

我得到的结果仅是'a' -> num += 100。.

在此问题中,我能否仅使用“何时”表达来获得解决方案?

1 个答案:

答案 0 :(得分:2)

在Kotlin中,等效的when表达式如下:

val c = // some char
val num = 100 + when (c) {
    'c' -> 10
    'a', 'd', 'e' -> 100
    else -> 0
}

请注意,在这种情况下,else的情况必须用作when must be exhaustive,因为它被用作en表达式,即它必须覆盖c的所有可能值。例如,如果cBoolean(或enum或任何其他域有限的值),那么您可能已经涵盖了所有可能的情况而没有else情况,因此编译器将允许以下操作:

val c = // some boolean
val num = 100 + when (c) {
    true -> 10
    false -> 0
}
如果

when不是用作表达式而是用作传统的控制流语句(例如Java 12之前的switch语句),则不需要穷举,如以下代码片段所示:< / p>

val c = // some char
var num = 100

when (c) {
    'a', 'd', 'e' -> num += 100
    'c' -> num += 10
}