Wenn es eine Methode gibt
bool DoStuff() {
try {
// doing stuff...
return true;
}
catch (SomeSpecificException ex) {
return false;
}
}
sollte es eher heißen IsStuffDone()
?
Beide Namen können vom Benutzer falsch interpretiert werden: Wenn der Name der DoStuff()
Grund ist, wird ein Boolescher Wert zurückgegeben? Wenn der Name ist IsStuffDone()
, ist nicht klar, ob die Methode eine Aufgabe ausführt oder nur ihr Ergebnis prüft.
Gibt es eine Konvention für diesen Fall? Oder ein alternativer Ansatz, da dieser als fehlerhaft gilt? Beispielsweise könnte in Sprachen mit Ausgabeparametern wie C # eine boolesche Statusvariable als eine an die Methode übergeben werden, und der Rückgabetyp der Methode wäre void
.
BEARBEITEN: In meinem speziellen Problem kann die Ausnahmebehandlung nicht direkt an den Aufrufer delegiert werden, da die Methode Teil einer Schnittstellenimplementierung ist. Daher kann der Aufrufer nicht mit der Behandlung aller Ausnahmen verschiedener Implementierungen beauftragt werden. Diese Ausnahmen sind nicht bekannt. Der Anrufer kann jedoch mit einer benutzerdefinierten Ausnahme umgehen, wie StuffHasNotBeenDoneForSomeReasonException
in der Antwort und im Kommentar von npinti vorgeschlagen .
boolean
es fast immer falsch ist, eine Ausnahme zurückzugeben, anstatt sie zu verpacken oder zu übergeben.
BadlyDesignedMethodInSeriousNeedOfRefactoring
? Und um Ihre Frage zu den Ausnahmen zu beantworten: Ich würde sie entweder vom Anrufer behandeln lassen oder abfangen lassen und dann eine benutzerdefinierte Ausnahme auslösen, die bedeutet, dass "diese Methode ihre Aufgabe nicht erfüllt". Teile und genieße.
if (FirstMethodSucceeds(problem) or SecondMethodSucceeds(problem) or ...) Hurray(); else UniversalSolve(problem);
. Dasselbe mit (benutzerdefinierten?) Ausnahmen zu tun, wäre sinnlos komplizierter.