A menudo me encuentro devolviendo un booleano de un método, que se usa en múltiples ubicaciones, para contener toda la lógica alrededor de ese método en un solo lugar. Todo lo que necesita saber el método de llamada (interno) es si la operación fue exitosa o no.
Estoy usando Python pero la pregunta no es necesariamente específica de ese lenguaje. Solo hay dos opciones en las que puedo pensar
- Genere una excepción, aunque las circunstancias no son excepcionales, y recuerde detectar esa excepción en cada lugar donde se llama la función
- Devuelve un booleano como lo estoy haciendo.
Este es un ejemplo realmente simple que demuestra de lo que estoy hablando.
import os
class DoSomething(object):
def remove_file(self, filename):
try:
os.remove(filename)
except OSError:
return False
return True
def process_file(self, filename):
do_something()
if remove_file(filename):
do_something_else()
Aunque es funcional, realmente no me gusta esta forma de hacer algo, "huele" y a veces puede dar lugar a muchos ifs anidados. Pero no puedo pensar en una forma más simple.
Podría recurrir a una filosofía y uso más LBYL os.path.exists(filename)
antes de intentar la eliminación, pero no hay garantías de que el archivo no se haya bloqueado mientras tanto (es poco probable pero posible) y todavía tengo que determinar si la eliminación se realizó correctamente o no.
¿Es este un diseño "aceptable" y, de no ser así, cuál sería una mejor manera de diseñarlo?