A J programozási nyelv

Kivételkezelés

Szintaxis

A J nyelv kivételkezelése a szokásos try-catch szintaxisra épül. Érdekesség, hogy háromféle catch van, ezekre később térünk ki. A kivételkezelés a következőképpen nézhet ki (Bi - programblokk):

try. B0 catch. B1 catchd. B2 catcht. B3 end.

Kivételek definiálása

A J nyelv számos beépített kivételt tartalmaz, melynek teljes listája ezen az oldalon tekinthető meg. Saját kivétel definiálására tudtommal nincs lehetőség.

Kivételek kiváltása

Kivétel kiváltására a throw. kulcsszóval van lehetőségünk. De a throw által kiváltott kivételt, csak a "catcht." részben lehet lekezelni.
Példa:

main=: 3 : 0 try. sub y catcht. select. type_jthrow_ case. 'aaaa' do. 'aaaa' case. 'bbb' do. 'bbb' case. 'cc' do. 'cc' case. do. throw. NB. magasabb rendű catch által lesz lekezelve end. end. ) sub=: 3 : 0 if. y'<'0 do. type_jthrow_=: 'aaaa' throw. end. if. y'<'4 do. type_jthrow_=: 'bbb' throw. end. if. y'<'8 do. type_jthrow_=: 'cc' throw. end. (":y),' not thrown' ) main 1

bbb

Kivételek kezelése

A J nyelvben a catch blokk maga a kivételkezelő rész. Háromféle catch blokk van melyek tetszőleges sorrendben követhetik egymást. A kivételek kezelését a következő példán keresztül mutatjuk be(Bi - programblokk):

try. B0 catch. B1 end. try. B0 catcht. B1 catchd. B2 end. try. B0 catcht. B1 catch. B2 catchd. B3 end.


A különböző debug flag-ek ezen az oldalon tekinthetők meg.
Példa:

f=: 4 : 0 try. try. 3+y catch. *:x end. catch. 'x and y are both bad' end. ) 'sui' f 'generis'

x and y are both bad

Kivételek terjedése

A kivétel a hívási láncon visszafelé terjed, egészen addig, amíg valahol el nem kapják. Ha egy kivételt egy neki megfelelő catch ágban elkapunk, akkor a kivétel terjedése megáll. Ha a kivétel nem talál neki megfelelő catch-t akkor magasabb rendű catch kezeli le (lásd itt a példában).