Тип Result
Моделируйте успех и неудачу
«Тип Result» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.
Успех или неудача
Многие операции могут завершиться неудачей. Тип Result в Kotlin представляет результат, который может быть либо success со значением, либо failure с исключением, — без выбрасывания исключения.
Создание success
Оберните значение в успешный результат с помощью Result.success(value).
fun main() {
val r: Result<Int> = Result.success(42)
println(r.isSuccess)
println(r.getOrNull())
}Создание failure
Представьте ошибку с помощью Result.failure(exception). Исключение не выбрасывается, пока Вы не решите извлечь его.
fun main() {
val r: Result<Int> = Result.failure(IllegalStateException("bad"))
println(r.isFailure)
println(r.exceptionOrNull()?.message)
}getOrNull и exceptionOrNull
Безопасно проверьте результат: getOrNull() возвращает значение или null, а exceptionOrNull() возвращает ошибку или null.
fun main() {
val ok = Result.success("hi")
val bad = Result.failure<String>(RuntimeException("oops"))
println(ok.getOrNull())
println(bad.exceptionOrNull()?.message)
}getOrDefault
Укажите запасное значение для failure с помощью getOrDefault. Это чище, чем проверки на null, если у Вас есть подходящее значение по умолчанию.
fun main() {
val bad: Result<Int> = Result.failure(Exception())
println(bad.getOrDefault(0))
val ok: Result<Int> = Result.success(7)
println(ok.getOrDefault(0))
}getOrElse
getOrElse вычисляет запасное значение на основе исключения, позволяя по-разному реагировать на разные ошибки.
fun main() {
val r: Result<Int> = Result.failure(IllegalArgumentException("nope"))
val value = r.getOrElse { e -> if (e is IllegalArgumentException) -1 else -2 }
println(value)
}getOrThrow
Если Вам нужно получить исключение, getOrThrow() возвращает значение или повторно выбрасывает сохранённое исключение.
fun main() {
val ok = Result.success(10)
println(ok.getOrThrow())
try {
Result.failure<Int>(IllegalStateException("fail")).getOrThrow()
} catch (e: Exception) {
println("caught: " + e.message)
}
}Возврат Result
Функция может возвращать Result, явно указывая возможность failure в своей сигнатуре и заставляя вызывающий код обрабатывать оба исхода.
fun parse(s: String): Result<Int> {
val n = s.toIntOrNull()
return if (n != null) Result.success(n)
else Result.failure(NumberFormatException(s))
}
fun main() {
println(parse("123").getOrNull())
println(parse("x").exceptionOrNull()?.message)
}Result и исключения
Исключения не видны в сигнатурах и нарушают ход выполнения. Result превращает failure в значение, которое можно передавать и преобразовывать как любое другое, — явное, пригодное для композиции и такое, которое сложно проигнорировать.
Когда использовать Result
Используйте Result для ожидаемых и допускающих восстановление сбоев, которые должны обрабатывать вызывающие стороны. Исключения оставляйте для действительно исключительных ситуаций и ошибок программиста, например нарушений контрактов.
Значение, а не переход
Главная идея: ошибка становится обычным возвращаемым значением. Далее Вы изучите runCatching, который автоматически превращает выброшенные исключения в Result.
Быстрая проверка
Проверьте, насколько хорошо Вы понимаете тип Result.
Итоги
Вы изучили тип Result:
- Создание с помощью
Result.success/Result.failure - Проверка с помощью
getOrNull,exceptionOrNull - Восстановление с помощью
getOrDefault,getOrElse,getOrThrow - Возврат типа для явного представления failure
Далее: runCatching.
Часто задаваемые вопросы
Урок «Тип Result» бесплатный?
Да — полный текст урока «Тип Result» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.
Чему я научусь в уроке «Тип Result»?
Моделируйте успех и неудачу Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Kotlin Academy?
Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Тип Result»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Kotlin Academy?
Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.