Az Ada 2005 programozási nyelv

Kivételkezelés

Röviden az Ada 2005 kivételkezeléséről:

Most már lehet olyan kivételt dobni, aminek van szöveges megjegyzése:

raise Some_Error with "Egy üzenet";

amely pont a következővel egyezik meg:

Ada.Exceptions.Raise_Exception(Some_Error'Identity, "A message");

Az Exception_Identity Ada 95 esetén Constraint_Error-t dobott, ha egy Null_Occurance paramétert kapott, Ada 2005-ben viszont már a várt Null_Id értéket adja vissza. Az Ada 95 bevezette a moduló típust, az Ada 2005-ben hozzáadták a Mod attribútumot is (pl. szegmens és offszet számításnál):

Address := Address + Address_Type'Mod(Offset);

Ezen változásoktól eltekintve a kivételek szintaxisa, definiálása, kiváltása, kezelése és terjedése az Ada 95-höz hasonló. A linkeket lásd lejjebb.

Szintaxis

Kivételek deklarálásának a szintaxisa a következő:
 exception_declaration ::= defining_identifier_list : exception;

Kivételek kezelésének a szintaxisa a következő:
 handled_sequence_of_statements ::= sequence_of_statements
 [exception
 exception_handler
 {exception_handler}]
 exception_handler ::= when [choice_parameter_specification:] exception_choice {| exception_choice} => sequence_of_statements
 choice_parameter_specification ::= defining_identifier
 exception_choice ::= exception_name | others

Kivételek kiváltásának a szintaxisa a következő:
 raise_statement ::= raise;
 | raise exception_name [with string_expression];

Példák:

Singular : exception;
Error : exception;
Overflow, Underflow : exception;

Részleteket itt találunk:

Kivételek definiálása

Ada 2005-ben (úgy mint az Ada 95 esetében) vannak előre definiált kivételek, de létre lehet hozni új, saját kivételeket is. Erre vonatkozó példa olvasható a Szintaxis részben, vagy ezen a linken. Az Ada 95 esetében megismert Constraint_Error, Program_Error, Storage_Error, Tasking_Error mellett vannak még egyéb, a nyelv által definiált kivételek is. Ezekről bővebben itt lehet olvasni:

Kivételek kiváltása

A kiváltásra vonatkozó szintaxis feljebb olvasható. Lássunk néhány példát kivételek kiváltására:

 raise Ada.IO_Exceptions.Name_Error;
 raise Queue_Error with "Buffer Full";
 raise;

További információ itt található:

Kivételek kezelése

A kezelésre vonatkozó szintaxis feljebb olvasható. Lássunk egy példát kivételek lekezelésére:

begin
 Open(File, In_File, "input.txt");
exception
 when E : Name_Error =>
  Put("Cannot open input file : ");
  Put_Line(Exception_Message(E));
 raise;
end;

További információ a kivételek kezelésével kapcsolatban itt található:

Kivételek terjedése

Kivételek terjedése hasonló az Ada 95 esetében megismertekhez. Ezzel kapcsolatban bővebb információ itt található:

Egyéb kapcsolódó dolgok

Az előző szekciók egyikébe sem illő dolgokról illetve pédákról a következő linkeken lehet olvasni: