Si hay un método
bool DoStuff() {
try {
// doing stuff...
return true;
}
catch (SomeSpecificException ex) {
return false;
}
}
¿debería ser llamado IsStuffDone()
?
El usuario puede malinterpretar ambos nombres: si el nombre es DoStuff()
por qué devuelve un valor booleano? Si el nombre es, IsStuffDone()
no está claro si el método realiza una tarea o solo verifica su resultado.
¿Hay alguna convención para este caso? ¿O un enfoque alternativo, ya que este se considera defectuoso? Por ejemplo, en lenguajes que tienen parámetros de salida, como C #, una variable de estado booleana podría pasarse al método como uno y el tipo de retorno del método sería void
.
EDITAR: en mi problema particular, el manejo de excepciones no se puede delegar directamente a la persona que llama, porque el método es parte de una implementación de interfaz. Por lo tanto, la persona que llama no puede ser acusada de ocuparse de todas las excepciones de diferentes implementaciones. No está familiarizado con esas excepciones. Sin embargo, la persona que llama puede lidiar con una excepción personalizada StuffHasNotBeenDoneForSomeReasonException
como se sugirió en la respuesta y comentario de npinti .
boolean
lugar de envolver o pasar la excepción es casi siempre incorrecto.
BadlyDesignedMethodInSeriousNeedOfRefactoring
? Y para responder a su pregunta sobre las excepciones, dejaría que la persona que llama las maneje o las atrape y luego arroje una excepción personalizada que significa "este método no hace su trabajo". Comparte y Disfruta.
if (FirstMethodSucceeds(problem) or SecondMethodSucceeds(problem) or ...) Hurray(); else UniversalSolve(problem);
. Hacer lo mismo con excepciones (¿personalizadas?) Sería inútilmente más complicado.