Forte

Kivételkezelés

A kivételkezelés működése hasonló a többi nyelvéhez. A kivételkor kiváltodó szignál kifelé és blokkonként terjed. Amennyiben az adott szignál nem került lekezelésre a egyik blokkban sem, abban az esetben a nyelv automatikusan lekezeli azt. A kivételkezelés lehetséges helyei a kódban: 'begin' és 'end' között, illetve 'begin transaction', 'case', 'event', 'event handler', 'for', 'if','while' utasitásokban szerepelhetnek.

Elöre definiált kivételek

A kivételek a nyelv által elöre definiált GenericException osztály és az ebböl örökölt osztályok valamelyike által kezelhetök le. Hat fő osztály öröklödik a GenericException-ből. Ezek a következök:
Kivételek: Megjegyzés:
AbortException Tranzakció abort-álásakor.
ResourceException Valamelyik manager generálja. (pl.: DBMS, file, lock)
CancelException Taskok kommunikációjakor jön létre.
ArithmeticException Hibás artitmetikai müveletek esetén van. (pl.: túlcsordulás, 0-val való osztás)
DataTypeException Hibás adatkonverzió és null érték esetén áll elő.
DefectException Bug-ok esetén váltódik ki. (pl.: NIL object, hibás metódus használat)

A felsorolt hat osztály mindegyike még több alosztályt tartalmaz.

Felhasználó által definiált kivételek

Saját kivétel létrehozása mindig a GenericException osztályból öröklödik. A kivételek kiváltódása történhet automatikusan illetve expliciten a programozó által. Ekkor a kivétel kiváltódása a 'raise' parancs segítségével történik.

Kivételek lekezelése

A kivételek lekezelése a blokkon belöl az 'exception' parancs után következnek. Minden blokknak lehet saját kivételkezelője. Amennyiben egy kivétel kiváltódott, úgy a Forté ellenörzi, hogy melyik 'when' ágban kezelődik le. Ha nincs megfelelő osztály a 'when' ágban, akkor megnézi, hogy valamelyikböl öröklödéssel keletkezett-e. Ha igen, akkor az a 'when' ág kerül végrehajtásra, különben pedig az 'else' ágra kerül a vezérlés. Amennyiben nincsen 'else ág', úgy egy blokkal feljebb kerül a vezérlés. A 'when' ágaknak nem kell diszjunktaknak lenniük. Ebben az esetben az az ág hajtódik végre, amelyikhez az adott kivétel a legközelebb áll. Kivételkezelés syntaxisa:
EXCEPTION [WHEN változó_név: osztály DO utasítás_blokk]... [ELSE [DO] utasítás_blokk]

Példa:

begin ... exception when e : AbortException do ... when e : ResourceException do ... else do ... end;