Как выражение kotlin 'when' может создать процесс в качестве этого кода переключения? - PullRequest
0 голосов
/ 21 апреля 2019
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 Ответ

2 голосов
/ 21 апреля 2019

В Kotlin эквивалентное выражение when выглядит следующим образом:

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

Обратите внимание, что в этом случае необходим else, так как when должен быть исчерпывающим , поскольку оно используется в качестве выражения en, т.е. оно должно охватывать все возможные значения c.Если бы c было Boolean, например (или enum или любое другое значение с ограниченным доменом), то вы могли бы охватить все возможные случаи без else, поэтому компилятор разрешил бы следующее:

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

when не обязательно должен быть исчерпывающим, если он используется не как выражение, а как традиционный оператор потока управления (например, оператор pre-Java 12 switch), как показано нижефрагмент:

val c = // some char
var num = 100

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