Cursus Raku / Obiecta, introitus et exitus, et exceptiones / Exceptiones / Exceptiones propriae / Exercises / Error numeri negativi
Solutio: Error numeri negativi
Ecce solutio possibilis huius exercitationis.
Codex
class Negative is Exception {
has $.n;
method message {
"$.n is negative";
}
}
sub check($n) {
Negative.new(n => $n).throw if $n < 0;
return $n;
}
{
say check(-5);
CATCH {
when Negative {
say .message;
}
}
}
Negative.new(n => -10).throw;🦋 Inveni codicem fontem in archivo negative-error.raku.
Exitus
-5 is negative
-10 is negative
in block <unit> at negative-error.raku line 24Commentarii
Negative is Exceptionclassem iaciendam reddit, et methodus eiusmessageattributonutitur ad textum aedificandum.checkintroitum suum probat et exceptionem propriam pro numero negativo iacit. Exceptio excheckadCATCHin clausula vocante migrat, ubiwhen Negativeei genere convenit nuntiumque imprimit. Introitum probare et valores malos exceptione generis notati significare est usus verus et frequentissimus exceptionum propriarum.{ … }circa vocationem adest quia fasisCATCHexceptiones tractat quae in propria clausula ambiente iaciuntur. Clausula periculosumcheck(-5)una cumCATCHquae illud custodit congregat, itaque exceptio iacta hic ipso loco capitur, et exsecutio statim post clausulam resumit. Nisi ea in clausulam involuta essent,CATCHtotum programma custodiret — et, postquam exceptionem cepisset, programma simpliciter finiret, nullo loco naturali ubi pergeret.Ultimum
Negative.new(n => -10).throwalteram huius rei partem ostendit. Extra clausulam sedet, itaque nihil illud capit: exceptio usque ad summum propagatur, et programma moritur, nuntium et vestigium ad errorem vulgarem imprimens et cum statu non nullo exiens. Ea est sors praedefinita cuiuslibet exceptionis quam non capis — et exacte ratio cur primus iactusCATCHegeret ut superesset.