Тернарный оператор, использующий когда - PullRequest
0 голосов
/ 27 сентября 2018

Как написать условный котлин

if (a) b else c

, используя when

1 Ответ

0 голосов
/ 27 сентября 2018
when (a) {
  true -> b
  else -> c // or false -> c
}

как вы видите: if / else легче понять в этом конкретном случае.

Если a не будет просто логическим значением, when может сделать большесмысл, например:

when (a) {
  is Scalable -> TODO("scale it")
  else -> TODO("whatever makes sense")
}

Новые или другие условия могут быть легко добавлены ... но это не имеет особого смысла для простых булевых вычислений.

Когда вы добавили комментарий оудобочитаемость, а в вашем примере показано только задание, может быть, вам будет удобнее прочитать следующее:

val c = if (x) "a"
        else "b"

или если вы хотите смоделировать нечто похожее на троичный оператор:

val c = x.takeIf { it }?.let { "a" }
        ?: "b"

IНадеюсь, однако, что вы получите точку ... если у вас есть boolean, используйте if / else.Но если ваше состояние более сложное, может пригодиться что-то вроде takeIf ... (мне очень жаль, что я использовал x.takeIf { it } здесь ... но это скорее демонстрация того, что возможно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...