@Medium: Ich verstehe deine Argumentation. Aber, und auch das ist natürlich philosophisch, du beschreibst die Nutzung von Exceptions ausschließlich für unerwartete Fehler. Jedoch ist eine
Exception, die man abfängt, nicht unerwartet - im Gegenteil, wenn man zum Beispiel einmal FxCop über ein Programm laufen lässt, wird der sich beschweren, wenn man einen allgemeinen
Exception-Handler gebaut hat - weil man damit einen unerwarteten (!) Fehler abfängt, obwohl man nicht weiß, wie er zu behandeln ist. Fängt man jedoch eine spezifische
Exception, erwartet man sie ja und kann damit umgehen (und sei es im schlimmsten Fall nur eine Fehlermeldung). Kann man es nicht, fängt man sie eben nicht oder wirft sie weiter.
Zitat:
Im Falle einer Login-Funktion, die es eben zur Aufgabe hat zu prüfen ob die Daten gültig sind, ist der Fall der Ungleichheit wohl definiert, und keine "Ausnahme", sondern ein erwartetes mögliches Ergebnis, und der Programmfluss wird keineswegs kompromitiert. Von daher würde ich in diesem Fall nicht einmal auf die Idee kommen, Exceptions einzusetzen.
Ich stimme damit sofort überein, wenn die Login-Funktion nur die Gültigkeit prüfen soll - wenn sie jedoch auch noch den tatsächlichen Login-Vorgang durchführen soll, ähnelt sie von ihrer Art her eher einer FileOpen-Funktion, und man muss sich drüber streiten, ab wie häufigem Auftreten ein Fehlerfall eine Ausnahme ist oder nicht. Das ist mir zu mühselig. Wo ist eine Ausnahme definiert? Sie tritt in maximal 0,1% aller Fälle auf? Und was, wenn jetzt meine Login-User nur jedes zweitausendste Mal ein falsches Passwort eingeben, deine jedoch jedes fünfhundertste mal? Müssen wir dann unsere Fehler deshalb unterschiedlich behandeln? Das will mir nicht in den Kopf.
Oh, und ist so auch nicht ganz ernst gemeint, keine Sorge.
Ich finde nur, eine Login-Funktion hat die Funktion, einen Login durchzuführen - klappt das nicht, ist das schon irgendwie eine Ausnahme. Aber da genau drehen wir uns wieder im Kreis, es ist eine Definitionsfrage. Ich nehme eure Argumentation einfach einmal auf und denke das nächste mal drüber nach, wenn ich in so eine Situation komme.
Hängt das vielleicht auch ein bisschen an der jeweiligen Umgebung, die man verwendet? In C++ zum Beispiel ist es in der STL auch unüblich, Exceptions zu werfen, oder es gibt teilweise Operationen doppelt (einmal mit Fehlercode und einmal mit
Exception), und auch Qt kommt weitgehend ohne aus. In Java oder .NET sieht man Exceptions hingegen überall.