S'il y a une méthode
bool DoStuff() {
try {
// doing stuff...
return true;
}
catch (SomeSpecificException ex) {
return false;
}
}
devrait-il plutôt s'appeler IsStuffDone()
?
Les deux noms pourraient être mal interprétés par l'utilisateur: Si le nom est: DoStuff()
pourquoi renvoie-t-il un booléen? Si le nom est, IsStuffDone()
il n'est pas clair si la méthode exécute une tâche ou ne vérifie que son résultat.
Existe-t-il une convention pour ce cas? Ou une approche alternative, comme celle-ci est considérée comme imparfaite? Par exemple, dans les langages ayant des paramètres de sortie, tels que C #, une variable d'état booléen peut être transmise à la méthode sous la forme d'une variable et le type de résultat de la méthode doit être void
.
EDIT: Dans mon problème particulier, la gestion des exceptions ne peut pas être directement déléguée à l'appelant, car la méthode fait partie d'une implémentation d'interface. Par conséquent, l'appelant ne peut pas être chargé de traiter toutes les exceptions d'implémentations différentes. Il ne connaît pas ces exceptions. Cependant, l'appelant peut gérer une exception personnalisée, comme StuffHasNotBeenDoneForSomeReasonException
suggéré dans la réponse et le commentaire de npinti .
boolean
au lieu d'envelopper ou de passer l'exception est presque toujours faux.
BadlyDesignedMethodInSeriousNeedOfRefactoring
? Et pour répondre à votre question sur les exceptions - je pouvais laisser l'appelant les gérer ou les intercepter puis émettre une exception personnalisée qui signifie "cette méthode ne fait pas son travail". Partager et profiter.
if (FirstMethodSucceeds(problem) or SecondMethodSucceeds(problem) or ...) Hurray(); else UniversalSolve(problem);
. Faire la même chose avec des exceptions (personnalisées?) Serait inutilement plus compliqué.