throw
— Werfen einer benutzerdefinierten oder Weiterwerfen einer mit catch
abgefangenen Exception.
throw( : : Exception : )
Die Operatoren try
, catch
, endtry
und throw
erlauben es, in HDevelop-Programme Code für eine dynamische
Fehlerbehandlung ähnlich zu den Programmiersprachen C++ oder C# einzubauen.
Grundlegende Informationen zur Fehlerbehandlung in HDevelop finden sich
außerdem bei den Operatoren try
und dev_set_check
sowie
im „HDevelop User's Guide“.
Der Operator throw
erlaubt es, an einer beliebigen Stelle im
Programm eine Exception zu werfen.
Diese kann dann mit dem catch
-Operator eines umgebenen
try
-catch
-Blocks gefangen werden.
Dadurch ist es dem Entwickler möglich, eigene Fehler- oder
Ausnahmezustände zu definieren, bei denen die normale
Programmausführung -- auch über Prozedurgrenzen hinweg -- abgebrochen
und in einen Fehlerbehandlungszweig gesprungen wird, beispielsweise
um reservierte Ressourcen freizugeben.
Bei einer solchen anwenderdefinierten Exception kann ein nahezu beliebiges
Tupel als Exception
-Objekt geworfen werden, es sollte lediglich das
erste Element des Tupels auf einen Fehlercode >= 30000 gesetzt
werden.
Können unterschiedliche anwenderdefinierte Ausnahmezustände auftreten,
können diese über verschiedene Fehlercodes (>= 30000) im
ersten Element oder über zusätzliche Elemente unterschieden werden.
Darüber hinaus erlaubt der throw
-Operator eine mit catch
gefangene Exception weiter zu werfen. Das ist beispielsweise dann sinnvoll,
wenn innerhalb eines inneren try
-catch
-endtry
-Blocks,
z.B. innerhalb einer Prozedur, die anderen Anwendungen bereitgestellt wird,
nur auf bestimmte Fehler reagiert werden soll oder kann, und andere Fehler
an den Aufrufer weitergereicht werden müssen.
In diesem Fall kann das mit catch
gefangene Exception
-Tupel
einfach als Exception
-Parameter übergeben und direkt
weitergereicht werden. Darüber hinaus ist es aber auch möglich, eigene
Elemente an das Exception
-Tupel hinten anzuhängen.
Diese können dann in dem äußeren catch
-Block mit Hilfe des
Operators dev_get_exception_data
als 'user_data' abgefragt
werden:
try ... catch (Exception) ... UserData := ... throw ([Exception, UserData]) endtry
Der Export der Operatoren try
, catch
, endtry
und throw
ist nur in die Sprachen C++, C# und VisualBasic/.NET
möglich, da nur sie das Werfen und Fangen von Exceptions über
Prozedurgrenzen hinweg unterstützen.
Beim Export nach C können diese Operatoren nicht
unterstützt werden.
Exception
(input_control) exception-array →
(integer / string)
Tupel mit den Fehlerdaten oder eigenen Fehlercodes.
Sind die Parameterwerte korrekt, dann liefert
throw
(als Operator) den Wert 2 (H_MSG_TRUE).
Andernfalls wird eine Fehlerbehandlung durchgeführt und ein Fehlercode
zurückgeliefert.
try
,
catch
,
endtry
,
dev_get_exception_data
,
dev_set_check
Foundation