A menudo me encuentro devolviendo un booleano desde 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 debe 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 idioma. Solo puedo pensar en dos opciones
- Genere una excepción, aunque las circunstancias no sean excepcionales, y recuerde que debe capturar esa excepción en todos los lugares donde se llama la función
- Devuelve un booleano como lo estoy haciendo.
Este es un ejemplo simple realmente que demuestra de qué 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 me disgusta 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 sencilla.
Podría recurrir a una filosofía más LBYL y usar 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 ha tenido éxito o no.
¿Es este un diseño "aceptable" y, si no, cuál sería una mejor manera de diseñar esto?