Обнаружение ошибок в конструкции when

when используется как выражение, но не покрывает все значения String и не имеет else, поэтому код не компилируется. Кроме того, println возвращает Unit, а не строку результата.

Короткий ответ

Что ответить на собеседовании

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 не нужна, но неизвестный ввод всё равно лучше обработать явно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее