На этом шаге мы рассмотрим организацию таких исключений.
Вы узнали, как использовать оператор throw, чтобы сообщить об исключительной ситуации. Возбуждение исключения IllegalStateException позволяет сообщить, что возникло недопустимое состояние, и добавить строку с дополнительной информацией.
Чтобы добавить больше деталей в исключение, можно создать пользовательское исключение для конкретной проблемы. Для этого нужно объявить новый класс, наследующий некоторое другое исключение. Классы позволяют определять "предметы" в программе - монстров, оружие, еду, инструменты и т. д. Больше о классах мы узнаем позже, поэтому пока в синтаксис можете не вникать.
Объявите пользовательское исключение с именем UnskilledSwordJugglerException в SwordJuggler.kt.
fun main() { var swordsJuggling: Int? = null val isJugglingProficient = (1..3).shuffled().last() == 3 if (isJugglingProficient) { swordsJuggling = 2 } proficiencyCheck(swordsJuggling) swordsJuggling = swordsJuggling!!.plus(1) println("You juggle $swordsJuggling swords!") } fun proficiencyCheck(swordsJuggling: Int?) { swordsJuggling ?: throw IllegalStateException("Player cannot juggle swords") } class UnskilledSwordJugglerException() : IllegalStateException("Player cannot juggle swords")
Рис.1. Объявление пользовательского исключения (SwordJuggler.kt)
UnskilledSwordJugglerException - это пользовательское исключение, которое работает как IllegalStateException, но с определенным сообщением.
Возбудить новое пользовательское исключение можно так же, как IllegalStateException, используя оператор throw. Возбудите свое новое исключение в SwordJuggler.kt.
fun main() { var swordsJuggling: Int? = null val isJugglingProficient = (1..3).shuffled().last() == 3 if (isJugglingProficient) { swordsJuggling = 2 } proficiencyCheck(swordsJuggling) swordsJuggling = swordsJuggling!!.plus(1) println("You juggle $swordsJuggling swords!") } fun proficiencyCheck(swordsJuggling: Int?) { swordsJuggling ?: throw UnskilledSwordJugglerException() } class UnskilledSwordJugglerException(): IllegalStateException("Player cannot juggle swords")
Рис.1. Возбуждение пользовательского исключения (SwordJuggler.kt)
UnskilledSwordJugglerException - это нестандартная ошибка, о которой нужно сообщить, если swordsJuggling равно null. Никакая часть кода не определяет, когда конкретно возбуждается исключение. Это только ваша ответственность.
Пользовательские исключения полезны и обеспечивают гибкость. Их можно использовать не только для вывода произвольных сообщений, но и для выполнения операций в ответ на их появление. Также они способствуют уменьшению дублирования кода, так как используются повторно в проектах.
На следующем шаге мы рассмотрим обработку исключений.