when используется как выражение, но не покрывает все значения String и не имеет else, поэтому код не компилируется. Кроме того, println возвращает Unit, а не строку результата.
Обнаружение ошибок в конструкции when
when используется как выражение, но не покрывает все значения String и не имеет else, поэтому код не компилируется. Кроме того, println возвращает Unit, а не строку результата.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Найдите недостатки в следующем фрагменте кода.
private val sampleString = "fourth"
fun main() {
val result = when (sampleString) {
"first" -> println("ok_first")
"second" -> println("ok_second")
"third" -> println("ok_third")
}
println(result)
}
Ответ
when используется как выражение, но не покрывает все значения String и не имеет else, поэтому код не компилируется. Кроме того, println возвращает Unit, а не строку результата.
Если нужен результат, ветки должны возвращать значения:
val result = when (sampleString) {
"first" -> "ok_first"
"second" -> "ok_second"
"third" -> "ok_third"
else -> "unknown"
}
println(result)
Для sampleString = fourth будет unknown. Если цель — только печать из веток, переменная result не нужна, но неизвестный ввод всё равно лучше обработать явно.