Frage von ekonitro, 50

Try und Catch (Visual Basic)?

Was ist die Bedeutung von denen und was machen sie?

Antwort
von CrystalixXx, 28

Das .NET Framework bietet ein einheitliches System für das Erzeugen, Auslösen und Behandeln von Ausnahmen. Ausnahmen heißt in dem Zusammenhang, dass sich das Programm in einem unerwarteten Ausführungszustand befindet. Dieser Zustand bewirkt auf Grund diverser Sicherheitsfestlegungen das Beenden der Anwendung.

Um das unbeabsichtigte Beenden zu verhindern gibt es ein Konstrukt (Try-Catch), dass einen geschützten Codeblock beschreibt. Dieser geschützte Codeblock wird in einem Kontext ausgeführt, in dem Ausnahmen auftreten können, aber nicht zum unweigerlichen Beenden der Anwendung führen. Sollte eine Ausnahme in einem solchen geschützten Codeblock (also innerhalb der Try-Anweisung) auftreten, dann sucht die CLR nach einer geeigneten Ausnahmebehandlung. Diese werden im Catch-Block definiert. Wenn die CLR eine Ausnahmebehandlung findet, dann wird die Codeausführung im jeweiligen Block fortgesetzt und das Programm kann fortgeführt werden. Wurde kein geeigneter Catch-Block gefunden, dann wird dies zum Beenden der Anwendung mit einer entsprechenden Meldung führen.

Kurz: Eine Try-Catch Anweisung dient der gezielten Behandlung von unerwarteten Ausnahmesituationen, meist Fehlerzuständen.

PS: Man würde vermuten, dass es demnach sinnvoll wäre das gesamte Programm in einen solchen Block zu packen, aber dann erzeugt man nur mehr Probleme als man damit löst. So trivial ist die Fehlerbehandlung in .NET dann doch nicht, auch wenn es so scheint.

Kommentar von CrystalixXx ,

Das ist übrigens eine gute Frage! Ich habe mich mit der Fehlerbehandlung in .NET intensiv auseinandergesetzt und finde den richtigen Umgang damit sehr wichtig. (Es wird einfach zu viel falsch gemacht, weil zu wenig verstanden wird.)

Antwort
von AnonYmus19941, 31

Man schreibt etwas in den Try-Block hinein, und falls bei der Ausführung ein Fehler (Exception) entsteht, dann wird dieser vom Catch-Block "aufgefangen".

Hier (http://www.willemer.de/informatik/cpp/exceptions.htm) ist eine Erklärung für die Funktion in C++ (funktioniert genauso).

Kommentar von CrystalixXx ,

Erklärt grundsätzlich worum es geht, aber leider wird an 2 Stellen (vielleicht auch nur an einer) schlechte Praktik als gängige Vorgehensweise suggeriert.

Zum einen:

Ein weiterer Vorteil liegt darin, dass nicht jeder Teilschritt einzeln
auf jede erdenkliche Fehlersituation geprüft werden muss.

Wer auf solche Kriterien an den falschen Stellen verzichtet (z.B. in rekursiven Methoden), der wird im Ausnahmefall ganz schnell an Geschwindigkeit und Programmstabilität einbüßen.

Und zum anderen (vielleicht weniger kritisch - je nach Deutung):

Dadurch kann die Fehlerbehandlung an einer zentralen Stelle durchgeführt werden.

Darauf sollte man verzichten, wenn man Wert auf eine stabile und sichere Anwendung mit definierten Zuständen legt. Mögliche Fehler sollten dort behandelt werden, wo die Ausführung "korrigiert" werden kann und das ist häufig in der Nähe der Ausnahme, nicht am Ende des Aufrufstapels als letzte Instanz. Vielleicht meint der Autor damit aber auch einfach nur die Anzeige eines geeigneten Fehlerdialogs oder ähnliches, was den Gebrauch rechtfertigt. Die Programmausführung sollte an der Stelle jedenfalls nicht mehr fortgesetzt werden.

Kommentar von AnonYmus19941 ,

Du hast natürlich in beiden Fällen recht, um solche Feinheiten ging es mir dabei aber eigentlich nicht. Ich wollte nur eine verständliche und etwas ausführlichere Erklärung anfügen...

Der erste Teil ist, denke ich, eher so gemeint, dass man
beispielsweise nach einer Benutzereingabe nicht prüfen muss, ob wirklich genau das eingegeben wurde, was man erwartet, sondern das Programm eben abbricht, wenn jemand etwas Falsches eingibt (nur als Beispiel). Natürlich sollte man nicht einfach, ohne zu überlegen, überall eine  solche Konstruktion hinmachen.

Auf so etwas kommt es allerdings vermutlich erst an, wenn man wirklich ernsthaft programmiert (als Beruf). Die Frage hört sich eher nach Freizeit an, und da ist es meiner Meinung nach relativ egal, wenn es mal eine Sekunde länger dauert und ob es "guter Programmierstil" ist...

Kommentar von CrystalixXx ,

Ja, das mag für den ein oder anderen Hobby-Programmierer genügen. Ich persönlich gehe da aber nach dem Motto "entweder ganz oder gar nicht". Aber da kann man natürlich geteilter Meinung sein.

Das Problem ist dabei leider, wenn man es nicht richtig lernt und dann doch in den Bereich einsteigt, man Probleme bekommt. Ich sehe auf Arbeit immer wieder die Programme von Entwicklern, die als professionell angestellt sind, deren Programme aber weit unter dem Durchschnitt liegen. Dann darf ich mich wieder damit rumärgern.

Aber das ist wohl nur mein Problem. : )

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten