| Operatoren |
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.
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
| Operatoren |