Расскажи про исключения в Kotlin

Ответ

В Kotlin исключения делятся на checked (проверяемые) и unchecked (непроверяемые). В отличие от Java, все исключения в Kotlin — unchecked, то есть компилятор не требует их явной обработки.

Основные типы исключений:

  • Exception – базовый класс для пользовательских исключений.
  • RuntimeException – непроверяемые исключения (например, NullPointerException).
  • IllegalArgumentException, IllegalStateException – частые unchecked исключения.

Обработка:

try {
    val result = 10 / 0  
} catch (e: ArithmeticException) {
    println("Деление на ноль!")  
} finally {
    println("Блок finally выполнится всегда")  
}

Создание кастомного исключения:

class MyException(message: String) : Exception(message)  

throw MyException("Ошибка!")  

Kotlin поощряет использование null-безопасности (?, !!, ?:) вместо исключений там, где возможно.

Ответ 18+ 🔞

Ну ты представляешь, в Kotlin с исключениями вообще отдельная история, ёпта. В Java, помнишь, были эти проверяемые исключения, которые тебе компилятор в рот совал, пока ты их не обработаешь? Так вот, в Kotlin — все исключения непроверяемые (unchecked). То есть компилятор тебе на них насрать, он не будет орать, что ты их не ловишь. Сам решай, где try-catch впендюрить, а где пусть летит наверх и всех накрывает.

Какие там бывают, эти исключения:

  • Exception – ну, это батя, основа основ. От него свои кастомные ошибки плодишь.
  • RuntimeException – это уже наши любимые непроверяемые ребята, вроде NullPointerException. Те самые, от которых всё падает неожиданно и красиво.
  • IllegalArgumentException, IllegalStateException – частые гости. Первое — когда аргумент кривой передали, второе — когда объект в таком состоянии, что делать с ним нихуя нельзя.

А ловится это всё вот так, просто:

try {
    val result = 10 / 0  // Ну ясен хуй, тут пиздец
} catch (e: ArithmeticException) {
    println("Деление на ноль, гений!")  // Ловим конкретную хрень
} finally {
    println("А этот блок выполнится всегда, хоть трава не расти")  
}

Хочешь свою, уникальную ошибку? Да хуй с ним, создавай!

class MyException(message: String) : Exception(message)  // Наследуешься и всё

throw MyException("Всё пропало, шеф!")  // Кидаешь её, где захочешь

И главная мысль, чувак: Kotlin так устроен, что он настойчиво предлагает не доводить до исключений. Зачем тебе try-catch, если можно использовать null-безопасность? Вот эти штуки: ?, !!, ?:. Они помогают обрабатывать потенциальные косяки элегантно, без вот этого всего try на овердохуища строк. Но если уж реально пиздец — тогда да, кидай исключение. Сам решай, волнение ебать.