На этом шаге мы поговорим о проверяемых и непроверяемых исключениях.
В Kotlin все исключения непроверяемые. Это значит, что компилятор Kotlin не заставляет запихивать весь код, который может вызвать исключения, в оператор try/catch.
Сравните, например, с Java, который смешивает коктейль из проверяемых и непроверяемых типов исключений. В случае с проверяемыми исключениями компилятор проверяет, есть ли защита от исключения, требуя добавить в программу try/catch.
Это звучит разумно. Но на практике идея проверяемых исключений не показывает себя так хорошо, как задумали ее создатели. Часто проверяемые исключения выявляются (компилятор требует обработать проверяемые исключения) и затем просто игнорируются, лишь бы программа скомпилировалась. Этот процесс "поглощения исключения" делает программу очень сложной в отладке, потому что скрывает информацию о том, что что-то пошло не так с самого начала. В большинстве случаев игнорирование проблемы во время компиляции добавляет ошибок во время выполнения.
Непроверяемые исключения победили в современных языках программирования, потому что опыт показал, что проверяемые исключения ведут к большим проблемам, чем те, которые они могут решить: дублирование кода, сложная для понимания логика и поглощенные исключения без данных об ошибке.
На следующем шаге мы рассмотрим как обеспечивается поддержка null?.