0Pricing
Kotlin Academy · Урок

Тип 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 — локальная установка не требуется.

Все уроки этого курса

  1. Тип Result
  2. runCatching
  3. Иерархии Result с запечатанными классами
  4. Функциональная обработка ошибок
← Назад к Kotlin Academy