Corso di Raku / Oggetti, input/output ed eccezioni / Eccezioni

Eccezioni personalizzate

Oltre alle eccezioni incorporate X::, puoi definire le tue. Un’eccezione personalizzata è una classe che eredita dalla classe incorporata Exception e fornisce un metodo message:

class TooBig is Exception {
    has $.value;

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

TooBig è una classe normale — può avere attributi come value — ma poiché è is Exception, può essere sollevata. La sollevi creando un oggetto e chiamandovi sopra .throw:

my $value = 20 * 30;

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

CATCH {
    when TooBig {
        say .message;
    }
}

Il programma stampa:

Value 600 is too big

Dentro il CATCH, when TooBig corrisponde perché l’oggetto sollevato è di quel tipo. Un’eccezione personalizzata porta con sé qualunque dato le dai (qui il value), così il gestore può costruire un messaggio preciso o reagire in modo specifico — molto più utile di una semplice stringa passata a die.

Questo mette insieme tutto ciò che c’è in questa parte: un’eccezione personalizzata è una classe (con attributi e un metodo) che partecipa al meccanismo delle eccezioni, pronta a segnalare esattamente che cosa è andato storto.

Pratica

Risolvi 1 quiz sul contenuto di questo argomento.

Esercizi

Questa sezione contiene 3 esercizi. Guarda tutti gli argomenti di questa sezione prima di iniziare gli esercizi.

  1. Troppo grande
  2. Un errore per i numeri negativi
  3. Due tipi di eccezione

Quiz — fail   |   Troppo grande