Claire

Kivételkezelés

Kivételkezelés

A nyelv hibakezelést is nyújt, amely egy nagyon hasznos tulajdonsága egy nyelvnek. Leírhatjuk egy blokk kivételes vagy rossz viselkedését. A kivétel kiváltható, hogy jelezzük ezt a viselkedést, s elkapódik a kivételkezelő részben. A kivételek Claire objektumok, az exception osztály leszármazottjai, és tárolhatnak információt adattagokban. A kivételkezelés szintaxisa:

try <expression> catch <class> <expression>

Például:

try 1 / x catch any printf("1/~A does not exists",x),0)

A "try e catch c f" kivételkezelőben minden kivétel elkapódik, ami az e kiértékelése folyamán történt, s a c osztályhoz tartozik. Egyébként továbbadódik a megelőző kivételkezelőnek, s így tovább. Ha a kivételkezelő elkap egy kivételt, akkor kiértékeli az f részt, és az értékével tér vissza. Az utoljára fellépő kivételt az exception!() metódussal közvetlenül is elérhetjük.

Fontos, hogy a kivételkezelő törzsében nem lehet break utasítás, amely egy ciklusból lépne ki a kivételkezelőn kívűl

A leggyakrabban előforduló kivételtípus az error, s a Claire segítséget is nyújt egy error létrehozásában az error(s:string, l:listargs) utasítással. Megértésére két példa:

error("stop here") error("the value of price(~S) is ~S!",x, price(x))

Másik fontos kivételtípus a contradiction. Példa erre:

try ( choice(),   ;create a new world catch contradiction (backtrack(),  ;return to previous world ...