Spesso mi ritrovo a restituire un booleano da un metodo, utilizzato in più posizioni, al fine di contenere tutta la logica attorno a quel metodo in un unico punto. Tutto il metodo di chiamata (interno) deve sapere se l'operazione ha avuto successo o meno.
Sto usando Python ma la domanda non è necessariamente specifica per quella lingua. Ci sono solo due opzioni a cui posso pensare
- Solleva un'eccezione, anche se le circostanze non sono eccezionali e ricorda di rilevare quell'eccezione in ogni punto in cui la funzione è chiamata
- Restituisce un booleano come sto facendo.
Questo è un semplice esempio che dimostra ciò di cui sto parlando.
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()
Sebbene sia funzionale, non mi piace molto questo modo di fare qualcosa, "odora" e a volte può generare un sacco di if annidati. Ma, non riesco a pensare a un modo più semplice.
Potrei passare a una filosofia LBYL e usare os.path.exists(filename)
prima di tentare la cancellazione, ma non ci sono garanzie che il file non sia stato bloccato nel frattempo (è improbabile ma possibile) e devo ancora determinare se la cancellazione ha avuto successo o no.
Si tratta di un design "accettabile" e, in caso contrario, quale sarebbe un modo migliore di progettarlo?