Ich finde es oft so, dass ich einen Booleschen Wert von einer Methode zurückgebe, die an mehreren Stellen verwendet wird, um die gesamte Logik um diese Methode an einer einzigen Stelle zu speichern. Die (interne) Aufrufmethode muss nur wissen, ob die Operation erfolgreich war oder nicht.
Ich benutze Python, aber die Frage ist nicht unbedingt spezifisch für diese Sprache. Ich kann mir nur zwei Möglichkeiten vorstellen
- Lösen Sie eine Ausnahme aus, obwohl die Umstände nicht außergewöhnlich sind, und denken Sie daran, diese Ausnahme an jeder Stelle abzufangen, an der die Funktion aufgerufen wird
- Gib einen Booleschen zurück, wie ich es tue.
Dies ist ein wirklich einfaches Beispiel, das zeigt, wovon ich spreche.
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()
Obwohl es funktioniert, mag ich diese Art, etwas zu tun, nicht, es "riecht" und kann manchmal zu einer Menge verschachtelter Ifs führen. Aber ich kann mir keinen einfacheren Weg vorstellen.
Ich könnte mich os.path.exists(filename)
vor dem Versuch, eine Löschung vorzunehmen, einer LBYL-Philosophie zuwenden, aber es gibt keine Garantie dafür, dass die Datei in der Zwischenzeit nicht gesperrt wurde (dies ist unwahrscheinlich, aber möglich), und ich muss immer noch feststellen, ob die Löschung erfolgreich war oder nicht.
Ist dies ein "akzeptables" Design und wenn nicht, was wäre ein besserer Weg, dies zu gestalten?