Exception = Ausnahme. An und für sich ist das eine philosophische Frage, aber man könnte es evtl. so sagen: Exceptions verwende ich, wenn auf Grund des aufgetretenen Fehlers ein stabiles Weiterlaufen der Methode nicht mehr möglich ist, bzw. die Funktion nicht mehr gewahrt ist - also der Zustand nach Auftreten undefiniert ist. Das Exceptionshandling kümmert sich dann um eine saubere Rückkehr aus dem Call, und informiert den Aufrufer darüber, dass eine Situation aufgetreten ist, die nicht sein darf/kann.
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.
Etwas anderes ist es, wenn z.B. mit einem String aus einer Datei verglichen werden soll, die Datei aber nicht existiert. Hier ist das erwartete Verhalten: Datei ist da, String ist drin, so wirds schließlich ausgeliefert. In dem Fall ist eine Ausnahme eingetreten, zumal es die Gesamtfunktion nachhaltig beeinflusst: KEIN Login kann mehr funktionieren - Prinzipbedingt, nicht weil der User falsche Daten eingegeben hat (was man durchaus erwarten kann), sondern weil etwas unerwartetes passiert ist.
Aber auch das ist
imho eigentlich noch zu "weich" für eine
Exception. Typische Fälle sind da eher Griffe in Speicherbereiche ausserhalb jeglicher Range, Stackoverflows, defekte Hardware usw.. Das meiste andere ist in definierten Zuständen behandelbar.
Oftmals sind die Messages der Exceptions auch für den Kunden nicht aussagekräftig. Daher würde ich auch niemals eine
Exception "einfach so" durchflutschen lassen, sondern zumindest einen generellen Handler machen, der genau beschreibt was wobei nicht geklappt hat, und zwar funktional, damit der User einen Bezug dazu hat - mit technischem Blabla hat der ja meist nichts zu tun - und hänge die
Exception-Message daran an, damit er bei einer Supportanfrage auch den technisch relevanten Teil durchgeben kann.
Man stelle sich vor Otto zu sein, und darf auf einmal lesen "Listeninxed überschreitete das Maximum (-1)", als man versucht eine mp3-Datei in seinen Player zu Drag-und-Droppen. Für Otto total nutzlos.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)