Шаг 73.
Основы Kotlin.
Null-безопасность и исключения. Исключения. Пользовательские исключения

    На этом шаге мы рассмотрим организацию таких исключений.

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

    Пользовательские исключения полезны и обеспечивают гибкость. Их можно использовать не только для вывода произвольных сообщений, но и для выполнения операций в ответ на их появление. Также они способствуют уменьшению дублирования кода, так как используются повторно в проектах.

    На следующем шаге мы рассмотрим обработку исключений.




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