0Pricing
Kotlin Academy · Урок

runCatching

Представляйте исключения как значения

«runCatching» — бесплатный урок Kotlin Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kotlin Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kotlin Academy содержит 4 уроков всего.

Перехват исключений

runCatching выполняет блок и оборачивает его результат в Result: возвращаемое значение становится success, а любое выброшенное исключение — failure. Блок try/catch не нужен.

Базовое использование

Передайте лямбду; последняя expression становится значением success.

fun main() {
    val r = runCatching { 10 / 2 }
    println(r.isSuccess)
    println(r.getOrNull())
}

Перехват выброшенной ошибки

Если блок выбрасывает исключение, runCatching сохраняет его вместо передачи дальше.

fun main() {
    val r = runCatching { 10 / 0 }
    println(r.isFailure)
    println(r.exceptionOrNull()?.message)
}

Оборачивание рискованного разбора

Обычно так оборачивают вызовы, которые могут выбросить исключение, например разбор данных, чтобы failure стало значением, которое можно обработать.

fun main() {
    val good = runCatching { "42".toInt() }
    val bad = runCatching { "abc".toInt() }
    println(good.getOrNull())
    println(bad.getOrNull())
}

runCatching как получатель

Можно вызвать runCatching для объекта-получателя; внутри блока this ссылается на него. Это удобно для объединения операций над значением в цепочку.

fun main() {
    val text = "  99 "
    val r = text.runCatching { trim().toInt() }
    println(r.getOrNull())
}

Восстановление на месте

Объедините с getOrElse, чтобы задать запасное значение прямо в месте вызова.

fun main() {
    val n = runCatching { "oops".toInt() }.getOrElse { -1 }
    println(n)
}

fold для обеих ветвей

fold обрабатывает success и failure одним вызовом и возвращает единое значение из любой ветви.

fun main() {
    val message = runCatching { "50".toInt() }.fold(
        onSuccess = { "got " + it },
        onFailure = { "error: " + it.message }
    )
    println(message)
}

Переработка try/catch

Там, где Вы могли бы написать try/catch с возвратом значения, runCatching будет короче и сохранит результат в виде данных.

fun safeDivide(a: Int, b: Int): Result<Int> =
    runCatching { a / b }

fun main() {
    println(safeDivide(8, 2).getOrNull())
    println(safeDivide(8, 0).exceptionOrNull()?.message)
}

Осторожнее с широким перехватом

runCatching перехватывает все выбрасываемые объекты, включая те, которые не следует подавлять. Не оборачивайте большие блоки; ограничивайте захватываемую область небольшим и намеренно выбранным фрагментом.

Объединение преобразований в цепочку

Поскольку runCatching возвращает Result, можно сразу вызвать для него map или recover. Мы рассмотрим их на следующем уроке.

fun main() {
    val r = runCatching { "7".toInt() }.map { it * 10 }
    println(r.getOrNull())
}

Чем это полезно

runCatching связывает код, выбрасывающий исключения, с миром значений Result. Он позволяет применять функциональную обработку ошибок даже при вызове программных интерфейсов, которые выбрасывают исключения.

Быстрая проверка

Проверьте, насколько хорошо Вы понимаете runCatching.

Итоги

Вы изучили runCatching:

  • Оборачивает результат выполнения блока в Result
  • Превращает выброшенные исключения в failure
  • Сочетается с getOrElse и fold
  • Ограничивает захватываемые области небольшими фрагментами

Далее: создание иерархий результатов на основе запечатанных типов.

Часто задаваемые вопросы

Урок «runCatching» бесплатный?

Да — полный текст урока «runCatching» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kotlin Academy, подпишись на CoddyKit PRO. Курс Kotlin Academy содержит 4 уроков всего.

Чему я научусь в уроке «runCatching»?

Представляйте исключения как значения Ты практикуешь Kotlin Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Kotlin Academy?

Предыдущий опыт не требуется. Kotlin Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «runCatching»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Kotlin Academy?

Да. Каждый урок Kotlin Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

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