Se esiste un metodo
bool DoStuff() {
try {
// doing stuff...
return true;
}
catch (SomeSpecificException ex) {
return false;
}
}
dovrebbe piuttosto essere chiamato IsStuffDone()
?
Entrambi i nomi potrebbero essere interpretati erroneamente dall'utente: se il nome è DoStuff()
perché restituisce un valore booleano? Se il nome è, IsStuffDone()
non è chiaro se il metodo esegue un'attività o ne controlla solo il risultato.
C'è una convenzione per questo caso? O un approccio alternativo, poiché questo è considerato difettoso? Ad esempio, nelle lingue che hanno parametri di output, come C #, una variabile di stato booleana potrebbe essere passata al metodo come una e il tipo di ritorno del metodo sarebbe void
.
EDIT: Nel mio particolare problema, la gestione delle eccezioni non può essere delegata direttamente al chiamante, poiché il metodo fa parte di un'implementazione dell'interfaccia. Pertanto, il chiamante non può essere incaricato di gestire tutte le eccezioni di diverse implementazioni. Non ha familiarità con queste eccezioni. Tuttavia, il chiamante può gestire un'eccezione personalizzata StuffHasNotBeenDoneForSomeReasonException
come è stato suggerito nella risposta e nel commento di npinti .
boolean
invece di avvolgere o passare l'eccezione è quasi sempre sbagliato.
BadlyDesignedMethodInSeriousNeedOfRefactoring
? E per rispondere alla tua domanda sulle eccezioni: o lascerei che il chiamante li gestisca, o li catturi e poi lanci un'eccezione personalizzata che significa "questo metodo non fa il suo lavoro". Condividi e divertiti.
if (FirstMethodSucceeds(problem) or SecondMethodSucceeds(problem) or ...) Hurray(); else UniversalSolve(problem);
. Fare lo stesso con le eccezioni (personalizzate?) Sarebbe inutilmente più complicato.