Trellis

Kivételkezelés

8. Kivételkezelés

A Trellis kivételkezelése néhány apró formai különbségtől eltekintve megegyezik a CLU kivételkezelésével.

8.1. Alprogram szintű kivételkezelés

Előfordulhat, hogy egy művelet nem képes teljesíteni feladatát. A program biztonsáossága érdekében ilyenkor kivételeket használunk. A kivételeket (exceptions) a művelet definíciójában kell felsorolnunk, signals kulcsszó után.

A kivétel kiváltása a signal kulcsszóval történik. Az utasításban egy objektumot is visszaadhatunk, amely a hibáról további információkat szolgáltathat a hiba kezelőjének.

signal kivételnév [ with objektum ];

A hibát a hívó blokknak kell kezelnie, vagy feljebb adni a hívási láncban a resignal kulcsszóval. A hibák kezelése a blokk végén az except kulcsszó után történik. Itt felsorolhatjuk a kezelendő kivételek nevét, és a kezelés módját. Az otherwise kulcsszó után megadhatjuk, hogy a fel nem sorolt esetekben mi a teendő.

except

on kivételnév1 do

utasítások

on kivételnév2 do

utasítások

[ ... ]

[ otherwise do

utasítások ]

Példánkban a power művelet az Integer típusban Integer hatványra emel egy számot. Ha a hatványkitevő negatív, akkor a művelet nem végezhető el, mert nem Integer számot kapunk.

operation power(me, exponent:Integer)

returns (Integer)

signals (Negative_Exponent)

is

begin

if exponent < 0 then

signal Negative_Exponent;

end if;

var value: Integer := 1;

for count: Integer in range(1, exponent) do

value := value*me;

end for;

end;

A kivétel kezelése:

begin

i := power(3,-12);

except

on Negative_Exponent do

print("error - Negative_Exponent");

end;

8.2. Blokk szintű kivételkezelés

continue:

A legbelső loop vagy for ciklus aktuális lépését megszakítja, és a ciklusmag következő végrehajtását kezdi meg.

exit [ when kifejezés1 ] [ with kifejezés2 ];

exit [ unless kifejezés1 ] [ with kifejezés2 ];

A legbelső loop vagy for ciklust terminálja, és a ciklusmag után folytatja a program végrehajtását. A when/unless kulcsszó után írhatunk kilépési feltételt (ha kifejezés1 igaz / kivéve ha kifejezés1 igaz), illetve a with kulcsszó után megadhatjuk a ciklus visszaadott értékét.

leave:

Elhagy egy blokkot, amiben éppen benne vagyunk. A blokkot címkével kell megjelölni. A blokk visszaadott értékét is megadhatjuk a with kulcsszó után.

címke begin

[ ... ]

leave címke [ with kifejezés ];

[ ... ]

end;