Je me retrouve souvent à renvoyer un booléen à partir d'une méthode, qui est utilisée à plusieurs endroits, afin de contenir toute la logique autour de cette méthode en un seul endroit. Tout ce que la méthode d'appel (interne) doit savoir, c'est si l'opération a réussi ou non.
J'utilise Python mais la question n'est pas nécessairement spécifique à ce langage. Il n'y a que deux options auxquelles je peux penser
- Lève une exception, bien que les circonstances ne soient pas exceptionnelles, et souviens-toi d'attraper cette exception à chaque endroit où la fonction est appelée
- Retourne un booléen comme je le fais.
Ceci est un exemple vraiment simple qui montre de quoi je parle.
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()
Bien qu'il soit fonctionnel, je n'aime vraiment pas cette façon de faire quelque chose, il "sent" et peut parfois donner lieu à de nombreux if imbriqués. Mais, je ne peux pas penser à un moyen plus simple.
Je pourrais me tourner vers une philosophie et une utilisation plus LBYL os.path.exists(filename)
avant d'essayer de supprimer, mais il n'y a aucune garantie que le fichier n'aura pas été verrouillé entre-temps (c'est peu probable mais possible) et je dois encore déterminer si la suppression a réussi ou non.
Est-ce une conception "acceptable" et sinon, quelle serait une meilleure façon de concevoir cela?