Sto riflettendo su questo problema da un po 'di tempo e mi ritrovo a trovare continuamente avvertimenti e contraddizioni, quindi spero che qualcuno possa produrre una conclusione su quanto segue:
Favorire eccezioni rispetto ai codici di errore
Per quanto ne sappia, dal lavorare nel settore per quattro anni, leggere libri e blog, ecc. L'attuale best practice per la gestione degli errori è generare eccezioni, piuttosto che restituire codici di errore (non necessariamente un codice di errore, ma un digitare che rappresenta un errore).
Ma - per me questo sembra contraddire ...
Codifica per interfacce, non implementazioni
Codifichiamo interfacce o astrazioni per ridurre l'accoppiamento. Non conosciamo o vogliamo sapere il tipo specifico e l'implementazione di un'interfaccia. Quindi, come possiamo sapere quali eccezioni dovremmo cercare di catturare? L'implementazione potrebbe generare 10 diverse eccezioni o non generare alcuna. Quando prendiamo un'eccezione sicuramente facciamo ipotesi sull'implementazione?
A meno che - l'interfaccia abbia ...
Specifiche di eccezione
Alcuni linguaggi consentono agli sviluppatori di affermare che determinati metodi generano determinate eccezioni (Java, ad esempio, utilizza la throws
parola chiave). Dal punto di vista del codice chiamante questo sembra a posto - sappiamo esplicitamente quali eccezioni potremmo dover catturare.
Ma questo sembra suggerire un ...
Astrazione che perde
Perché un'interfaccia dovrebbe specificare quali eccezioni possono essere generate? Cosa succede se l'implementazione non deve generare un'eccezione o deve generare altre eccezioni? Non è possibile, a livello di interfaccia, sapere quali eccezioni un'implementazione potrebbe voler generare.
Così...
Concludere
Perché le eccezioni sono preferite quando sembrano (ai miei occhi) contraddire le migliori pratiche del software? E, se i codici di errore sono così male (e non ho bisogno di essere venduti sui vizi dei codici di errore), c'è un'altra alternativa? Qual è lo stato dell'arte attuale (o che sarà presto) per la gestione degli errori che soddisfa i requisiti delle migliori pratiche come indicato sopra, ma non si basa sulla chiamata del codice che controlla il valore di ritorno dei codici di errore?