Felix Riesterer: Wann wirft man eine Exception

Beitrag lesen

Lieber T-Rex,

eigentlich hat Sven Dir schon alles sehr ausführlich beantwortet. Schade, dass Du vor lauter Bäumen keinen Wald mehr siehst.

Und schwups sind wir bei meiner Ursprungsfrage die ich immer noch nicht geklärt sehe, wann werfe ich eine Exception?

Im Ausnahmefall, wie der Name schon sagt.

Tjo bei dem Wort Exception hätte ich das fast vermutet, aber wann spreche ich von einer Ausnahme? Wenn die Funktion ihrer Aufgabe nicht nachkommen kann?

Wenn sie das nicht "kann", obwohl sie es "müsste". In Deinem Fall sagtest Du, dass der Tabellenname immer mitgegeben werden muss, sonst kann die Funktion nicht das tun, was sie soll.

Wenn ja, dann müsste ich bei meinem Beispiel 3 Exceptions schmeissen.

Wie kommst Du nun auf drei? In einem der drei Fälle kann die Funktion "true" zurückliefern, da sie korrekt den Datensatz hat löschen können. Im anderen Fall, wenn der Datensatz nicht (mehr) existiert, konnte sie trotzdem korrekt ihre Aufgabe lösen, wenngleich das gewünschte Ergebnis auf unerwartetem Weg zustande kam. Wegen dem "unerwartet" käme eine Exception in Frage.

Im dritten Fall kann die Funktion ihre Aufgabe nicht lösen, da ihr eine notwendige Information fehlt, nämlich der Tabellenname. Das bedeutet, dass Du als Programmierer einen Fehler gemacht hast. Das ist auf jeden Fall eine Exception wert.

Oder gibt es dafür keine Regel und ich mache es nach Gefühl?

Wie Sven schon angedeutet hat, macht das jeder nach seinem eigenen System. In Deinem Fall gibt es einen sehr guten und einen guten Grund eine Exception zu werfen. Der sehr gute Grund ist das Versagen des Programmierers einen (gültigen!) Tabellennamen zu übergeben. Der gute Grund ist das unerwartete ("unerwartet" beschreibt doch eine Ausnahme, oder nicht?) Fehlen des zu löschenden Datensatzes.

Die Frage ist, wie Du mit den beiden Exceptions, die ich als "guten Grund" oder "sehr guten Grund" beschrieben habe, umgehst. Fehlt ein gültiger Tabellenname, kann das Script nicht ordnungsgemäß weiterarbeiten und muss eine Exception werfen. Oder was machst Du, wenn die Folgeoperationen auf eine korrekte Löschung angewiesen sind und zwingend die Bestätigung für "nicht (mehr) vorhanden" benötigen? Ohne gültigen Tabellennamen kann diese Bestätigung nicht erfolgen. Hier wird eine Exception wohl zum Abbruch des Scripts führen (müssen).

Im anderen Fall, wenn der Datensatz als "nicht (mehr) vorhanden" _bestätigt_ werden kann, dann ist der Grund des Nichtvorhandenseins vielleicht ein außergewöhnlicher, stört aber den weiteren Verlauf des Scriptes nicht unbedingt. Eine solche Exception sollte vielleicht gelogged werden, aber nicht zum Abbruch des Scripts führen.

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)