Как обрабатывать "-> пусто" в котлинском "когда" - PullRequest
0 голосов
/ 19 марта 2020

Предположим, что следующее выражение when:

when(a)
{
   x    -> doNothing()
   y    -> doSomething()
   else -> doSomethingElse()
}

Теперь я пытаюсь исключить шаблонную функцию "doNothing ()", например:

x ->        //doesn't compile
x -> null   //Android Studio warning: Expression is unused
x -> {}     //does work, but my corporate codestyle places each '{‘ in a new line, looking terrible
            //also, what is this actually doing?

Чуть лучше идеи? Я не могу просто полностью исключить x ->, так как это приведет к else -> doSthElse()

Правка: сразу после написания этого Вопроса я нашел возможный ответ x -> Unit. Какие-нибудь недостатки с этим?

1 Ответ

2 голосов
/ 19 марта 2020

Kotlin имеет две существующие возможности для express конструкции «ничего не делать» в операторах когда. Либо единица, либо пустая пара скобок. Пустой блок просто не выполнит ничего. В этом отношении больше ничего не планируется (см. здесь ).

Чтобы ответить на ваш вопрос относительно "также, что это на самом деле делает?" для пустого блока поиск байт-кода и его перевод на Java помогает:

val x = 33
when(x)
{
    1 -> {}
    2 -> Int
    3 -> Unit
    else -> Double
}

Переводит на

int x = 33;
switch(x) {
  case 1:
  case 3:
     break;
  case 2:
     IntCompanionObject var10000 = IntCompanionObject.INSTANCE;
     break;
  default:
     DoubleCompanionObject var1 = DoubleCompanionObject.INSTANCE;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...