Stellen Sie sich vor, eine Glocke ertönt, der Computer nimmt keine Daten mehr an tout Eingabe drei Sekunden lang, und dann tritt jemand dem Benutzer gegen den Kopf.
Das sind die Kosten für eine Ausnahme. Wenn dadurch ein Datenverlust oder ein Brand des Rechners verhindert wird, sind sie die Kosten wert. Andernfalls ist es das wahrscheinlich nicht.
EDIT: Und da dies ein downvote (plus ein upvote, so +8 für mich!), werde ich die oben mit weniger Humor und mehr Informationen zu klären: Ausnahme, zumindest in C ++ Land, erfordern RTTI und Compiler und möglicherweise Betriebssystem Magie, die die Leistung von ihnen ein riesiges schwarzes Loch der Unsicherheit macht. (Es ist nicht einmal garantiert, dass sie ausgelöst werden, aber diese Fälle treten bei anderen, ernsthafteren Ereignissen auf, wie z.B. wenn der Speicher knapp wird oder der Benutzer den Prozess einfach beendet oder der Rechner tatsächlich Feuer fängt). Wenn Sie sie also verwenden, dann nur, um sich von einer Situation zu erholen, in der sonst etwas Schreckliches passieren würde, aber diese Erholung darf nicht mit der Erwartung verbunden sein, dass sie performant abläuft (was immer das für Ihre spezielle Anwendung sein mag).
Wenn Sie also Ausnahmen verwenden, können Sie nichts über die Auswirkungen auf die Leistung annehmen.
22 Stimmen
Sie sollten keine Ausnahmen für die allgemeine Logikbehandlung in Java verwenden.
8 Stimmen
@Bill: s/in Java/EVER/ Sie werden nicht umsonst "Ausnahmen" genannt; sie sind außergewöhnlich.
0 Stimmen
@Pesto: Ich stimme zu, aber ich sprach mehr über die Tatsache, dass der OP zu denken schien, es sei gängige Praxis in Java speziell.
1 Stimmen
Warum glauben Sie, dass sich C++0x-Ausnahmen so sehr von anderen Ausnahmen unterscheiden werden? Ich denke, dass die meisten Unterschiede zwischen den Implementierungen bestehen.
0 Stimmen
Ok.. Python als Beispiel also?
1 Stimmen
Für Ausnahmen fallen Kosten an. Aber das sollte Sie nicht beunruhigen. Es sollte der Unterschied in den Kosten zwischen der Verwendung von Ausnahmen und erhalten die gleichen Informationen aus, ohne Ausnahmen (so einen Fehlercode >>>>AND<<<<< Überprüfung auf jeder Ebene des Rückrufs zurückgeben). Ich wette, dass die Kosten ungefähr gleich hoch sind. Der Unterschied ist der sauberere Code (und damit die Wartbarkeit).
1 Stimmen
Könnten Sie erklären, wie mein Benchmark geändert werden sollte, damit Sie eine Chance haben, diese Wette zu gewinnen? Meine "Thrower"-Funktion führt nur einen Aufruf aus und gibt void zurück. Meine "returner"-Funktion führt einen Aufruf aus, prüft den Rückgabewert und gibt entsprechend Erfolg oder Misserfolg zurück. Die "Thrower"-Funktion ist eindeutig langsamer, wenn auch nicht langsam genug, um die meisten Anwendungen zu stören.