Шаг 72.
Основы Kotlin.
Null-безопасность и исключения. Исключения. Возбуждение исключений

    На этом шаге мы рассмотрим использование механизма возбуждения исключений.

    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. Вы можете объявить свои собственные исключения для представления ошибок, характерных для вашего приложения.

    На следующем шаге мы рассмотрим пользовательские исключения.




Предыдущий шаг Содержание Следующий шаг