Какие есть способы обработки исключений

«Какие есть способы обработки исключений» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Kotlin есть несколько способов обработки исключений:

  1. try-catch-finally - основной механизм:
try {
    // опасный код
} catch (e: IOException) {
    // обработка конкретного исключения
} catch (e: Exception) {
    // обработка других исключений
} finally {
    // выполнится в любом случае
}
  1. runCatching - функциональный стиль:
val result = runCatching {
    // код, который может выбросить исключение
}.fold(
    onSuccess = { value -> /* обработка успеха */ },
    onFailure = { e -> /* обработка ошибки */ }
)
  1. Result - обертка для возврата результата или исключения:
fun loadData(): Result<String> = runCatching {
    // код с возможным исключением
}
  1. CoroutineExceptionHandler - для корутин:
val handler = CoroutineExceptionHandler { _, exception ->
    // обработка исключения
}

Важно правильно выбирать тип обработки в зависимости от контекста и не злоупотреблять перехватом всех исключений (catch Exception).