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