throw — Werfen einer benutzerdefinierten oder Weitergeben 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.
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