Nutzen der AusnahmebehandlungWenn eine Sprache keine Ausnahmebehandlung besitzt, muss jede Methode einen Fehlercode liefern, auf den der Rufer dann reagieren kann, also z.B.: errCode = M1(...); if (errCode == 0) { errCode = M2(...); if (errCode == 0) { errCode = M3(...); if (errCode != 0) Error(...); } else Error(...); } else Error(...); Aus diesem Beispiel kann man mehrere Vorteile der Ausnahmebehandlung ableiten:
Als Nachteile der Ausnahmebehandlung kann man anführen, dass die Programmiersprache durch sie etwas komplexer wird und dass man mehr Schreibaufwand hat (Man muss eine Ausnahmeklasse deklarieren sowie eine try-catch-Anweisung und mehrere throw-Anweisungen schreiben). Im Allgemeinen nimmt man diese kleinen Nachteile jedoch wegen der viel größeren Vorteile in Kauf. Manche Leute halten es für einen schweren Nachteil, dass man in C# nicht wie in Java im Methodenkopf angeben kann, welche Ausnahmen eine Methode auslöst. Aus softwaretechnisches Sicht wäre diese Spezifikation natürlich wünschenswert, denn erstens dokumentiert sie die möglichen Fehlerfälle und zweitens kann der Compiler auf diese Weise prüfen, ob der Rufer einer Methode wirklich alle Ausnahmen abfängt. Allerdings hat sich gezeigt, dass Programmierer faul sind und dem Zwang, jede Ausnahme abfangen zu müssen, damit begegnen, dass sie "vorerst" einmal leere catch-Klauseln anschreiben, die sie dann später vergessen auszufüllen. Eine leere catch-Klausel ist aber schlimmer als gar keine, weil sie einen auftretenden Fehler schluckt. In C# führt ein nicht abgefangener Fehler zumindest zu einem Programmabsturz. |
||