Как использовать нулевой оператор безопасности в ветке когда в kotlin? - PullRequest
0 голосов
/ 23 октября 2018

Я написал логику, как показано ниже

fun snippet(value: String?): String {
    when (value?.toUpperCase()) {
        "A" -> "A"
        "B" -> "B"
        else -> ""
    }
}

Будет ли возвращено "", если значение переменной value равно null?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Да, будет.

Или, по крайней мере, будет, как только вы исправите синтаксическую ошибку ... (Функция определена так, чтобы возвращать строку, но ничего не возвращает. Чтобы это исправить,либо добавьте return перед when - либо сделайте его телом выражения, заменив первое { на = и удалив последнее }. Последний случай проще для коротких функций, особенно когда вы можететакже удалите тип возврата, но он менее подходит для более длинных.)

Самый простой способ проверить это, конечно, запустить его самостоятельно!Но да, после исправления синтаксиса, он действительно вернет пустую строку, если вызывается с помощью null.

. То, что происходит, это то, что оператор ?. (безопасный вызов) будет обходить вызов toUpperCase()если LHS null, и передать null непосредственно when.И поскольку null не равен "A" или "B", он падает до ветви else, которая дает пустую строку.

Как указывает другой ответ, вы, конечно, можетепроверьте null явно.Но Kotlin предоставляет вам несколько инструментов для более краткой обработки нулей (например, здесь используется оператор безопасного вызова), так что вам часто не нужно.

0 голосов
/ 23 октября 2018

Чтобы else поймал его, вы также можете проверить наличие null непосредственно в вашем when блоке:

when (value?.toUpperCase()) {
  ..
  null -> ""
}
...