На этом шаге мы рассмотрим использование механизма возбуждения исключений.
Kotlin, подобно другим языкам программирования, позволяет вручную послать сигнал о возникновении исключения. Это достигается применением оператора throw и называется возбуждением исключения. Есть много разных исключений, кроме Null Pointer Exception.
Зачем возбуждать исключение? Ответ кроется в названии - исключения нужны для описания исключительных ситуаций. Столкнувшись с непреодолимой проблемой, код может возбудить исключение и таким способом сообщить, что ее необходимо устранить, прежде чем двигаться далее.
Одно из таких распространенных исключений, с которым вы познакомитесь, - IllegalStateException. IllegalStateException - расплывчатая формулировка, она означает, что программа достигла состояния, которое вы считаете недопустимым. Это исключение удобно тем, что с ним можно передать строку и сообщить больше информации об ошибке.
Мир NyetHack загадочен, но наша таверна не без добрых людей. Один весельчак заметил, что вы недостаточно сноровисты в жонглировании, и вызвался помочь, чтобы предотвратить непоправимое. Добавьте функцию с именем proficiencyCheck() в SwordJuggler и вызовите ее в main(). Если swordsJuggling содержит null, вмешайтесь, возбудив IllegalStateException прежде, чем случится что-то ужасное.
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") }
Рис.1. Возбуждение IllegalStateException (SwordJuggler.kt)
Запустите код несколько раз, чтобы увидеть разные исходы.
Здесь вы сигнализируете, что программа оказалась в недопустимом состоянии, - swordsJuggling не должно быть равно null, иначе вы сильно рискуете. Это предупреждение указывает на то, что любой, кто захочет поработать с переменной swordsJuggling, должен приготовиться обработать исключение, возникающее из-за возможности появления значения null в переменной. Предупреждение не останется незамеченным, и это хорошо, потому что так вы вероятнее всего заметите исключительное состояние еще на этапе разработки, то есть раньше, чем сбой возникнет у пользователя. А так как вы добавили в IllegalStateException сообщение об ошибке, вы будете точно знать причину сбоя программы.
Возбуждать можно не только исключения, встроенные в Kotlin. Вы можете объявить свои собственные исключения для представления ошибок, характерных для вашего приложения.
На следующем шаге мы рассмотрим пользовательские исключения.