Курс Raku / Об’єкти, введення-виведення та винятки / Винятки

Власні винятки

Окрім вбудованих винятків X::, ви можете визначати власні. Власний виняток — це клас, який успадковує від вбудованого класу Exception і надає метод message:

class TooBig is Exception {
    has $.value;

    method message {
        "Value $.value is too big";
    }
}

TooBig є звичайним класом — він може мати атрибути на кшталт value, — але, оскільки він is Exception, його можна кинути. Кидають його, створивши об’єкт і викликавши для нього .throw:

my $value = 20 * 30;

TooBig.new(value => $value).throw if $value > 50;

CATCH {
    when TooBig {
        say .message;
    }
}

Програма виводить:

Value 600 is too big

Усередині CATCH when TooBig збігається, бо кинутий об’єкт має цей тип. Власний виняток несе ті дані, які ви йому дали (тут — value), тож обробник може побудувати точне повідомлення або відреагувати в конкретний спосіб, — це значно корисніше за звичайний рядок, переданий до die.

Це зводить докупи все з цієї частини: власний виняток є класом (з атрибутами й методом), який бере участь у механіці винятків, готовий сигналізувати саме про те, що пішло не так.

Практика

Виконайте 1 тест за змістом цієї теми.

Вправи

У цьому розділі 3 вправи. Перш ніж братися до практики, вивчіть усі теми розділу.

  1. Завелике
  2. Помилка від’ємного числа
  3. Два типи винятків

Навігація курсом

Тест — fail   |   Завелике