Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpRsSc 18 of 299 menu
◀ ▶

Успех и неудача в Kotlin

Класс Result можно собрать вручную, не только через обертку над лямбдой. Функция Result.success кладет готовое значение, Result.failure - исключение, которое описывает причину отказа.

Так удобно возвращать итог проверки из функции, когда ошибка - ожидаемый вариант, а не сбой среды:

fun badgeFor(score: Int): Result<String> { if (score < 0) { return Result.failure(IllegalArgumentException("negative score")) } if (score >= 90) { return Result.success("gold") } return Result.success("silver") } fun main() { println(badgeFor(95)) println(badgeFor(-1)) }

Перед использованием значения внутри Result смотрят флаги isSuccess и isFailure. Они взаимно исключают друг друга для одного и того же объекта:

fun badgeFor(score: Int): Result<String> { if (score < 0) { return Result.failure(IllegalArgumentException("negative score")) } if (score >= 90) { return Result.success("gold") } return Result.success("silver") } fun main() { val trial = badgeFor(72) if (trial.isSuccess) { println("ok") } if (trial.isFailure) { println("reject") } }

Свойство isFailure срабатывает только там, где функция вернула Result.failure. Для оценки 72 печатается "ok", ветка отказа не выполняется. Проверим отказ на другом правиле - день недели:

fun openSlot(day: String): Result<Int> { val allowed = setOf("mon", "wed", "fri") if (day !in allowed) { return Result.failure(IllegalStateException("closed")) } return Result.success(14) } fun main() { val slot = openSlot("tue") println(slot.isSuccess) println(slot.isFailure) }

Напишите функцию, которая по длине пароля возвращает Result со строкой "strong", если символов не меньше 8, иначе неудачу. Для "kotlin" и "longpass" выведите флаги успеха и неудачи через пробел в каждой строке.

Функция принимает код цвета из трех символов Char. При 'R', 'G' или 'B' верните успех с числом 1, 2 или 3, иначе неудачу. Проверьте 'G' и 'X' и выведите только isSuccess для каждого вызова.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить