@Betacoder sagte in Rückgabe von Berechnungsergebnissen:
Achso, so eine ganz pragmatische Antowort war gefragt. Vielen dank an die Helfer!
Neben der philosophischen Antwort, dass sie nicht dafür gedacht sind, gibt es auch recht konkrete Gründe dagegen:
Da sie nicht für Ausnahmen gedacht sind, ist der Mechanismus dafür sehr langsam (im Vergleich zu den anderen Methoden)
Da sie nicht dafür gedacht sind, gibt es lauter Sonderregeln, die einen beißen können und werden. Beispielsweise: Was passiert, wenn der Rückgabewert selber eine Exception verursacht? Bei den anderen Mechanismen ist dies wohldefiniert und intuitiv.
Weitere philosophische Gründe dagegen:
Man baut sich einen Wartungsalptraum, weil der Kontrollfluss nicht mehr klar ist. Bei einem normalen Funktionaufruf ist klar, was mit den Rückgabewerten passiert und wer die Verantwortung dafür hat. Relevante Codestellen sind genau die Funktion selbst, und die aufrufende Stelle. Exceptions können hingegen von wer weiß wem, wer weiß wo gefangen werden. Man muss sich vollständig aller Ebenen des Callstacks (die ja auch dynamisch unterschiedlich sein können!) bewusst sein, wenn man vorhersagen will, was genau mit der missbrauchten Exception passiert. Das ist quasi wie ein longjmp mit dynamischen Labels! Und das wenn schon goto mit statischen Labels zu Spagetticode führt.
(Tatsächlich ist longjmp mit dynamischen Labels die Art und Weise, wie man Exceptions in Sprachen programmieren würde, die keinen nativen Support dafür haben)