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

Замена неудачи в Kotlin

Функция recover срабатывает только при неудаче. Лямбда получает исключение и возвращает новое значение, из которого собирается успешный Result. Успех до вызова не меняется:

fun main() { val ok = Result.success("live") val kept = ok.recover { "backup" } println(kept) val bad = Result.failure<String>(IllegalStateException("down")) val fixed = bad.recover { "backup" } println(fixed) }

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

fun readTag(raw: String): Result<String> { return runCatching { require(raw.isNotBlank()) raw.trim() }.recover { "unknown" } } fun main() { println(readTag(" api ")) println(readTag(" ")) }

Функция recoverCatching, как и recover, работает только на неудаче, но ловит исключение внутри лямбды замены. Если подстановка сама падает, наружу снова уходит Result с ошибкой:

fun main() { val empty = Result.failure<Int>(IllegalArgumentException("no data")) val safe = empty.recoverCatching { error -> error.message!!.length } println(safe) val noMessage = Result.failure<Int>(RuntimeException()) val risky = noMessage.recoverCatching { error -> error.message!!.length } println(risky) }

Неудачный Result с Int замените на число 0. Успешный Result с 5 пропустите через тот же прием и выведите оба значения через getOrNull на отдельных строках.

После сбойного разбора строки ".." в число подставьте длину исходной строки в цепочке с безопасной лямбдой замены. Выведите итоговый Result.

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