Sto riflettendo su questo problema da un po 'di tempo e mi trovo continuamente alla ricerca di caveat e contraddizioni, quindi spero che qualcuno possa dare una conclusione a quanto segue:
Favorisci le eccezioni rispetto ai codici di errore
Per quanto ne so, dal lavoro nel settore per quattro anni, dalla lettura di libri e blog, ecc., l'attuale best practice per la gestione degli errori consiste nel generare eccezioni piuttosto che restituire codici di errore (non necessariamente un codice di errore , ma un tipo che rappresenta un errore).
Ma - a me sembra contraddire ...
Codifica su interfacce, non implementazioni
Codifichiamo le interfacce o le astrazioni per ridurre l'accoppiamento. Non sappiamo, o vogliamo sapere, il tipo specifico e l'implementazione di un'interfaccia. Quindi, come possiamo sapere quali eccezioni dovremmo cercare di prendere? L'implementazione potrebbe generare 10 eccezioni diverse, oppure non generarne nessuna. Quando rileviamo un'eccezione, stiamo facendo delle ipotesi sull'implementazione?
A meno che l'interfaccia non abbia ...
Specifiche delle eccezioni
Alcune lingue consentono agli sviluppatori di affermare che determinati metodi generano alcune eccezioni (Java ad esempio, usa la parola chiave throws
.) Dal punto di vista del codice chiamante ciò sembra corretto - sappiamo esplicitamente quali eccezioni avremmo bisogno di catturare.
Ma - questo sembra suggerire un ...
Estrazione di perdite
Perché un'interfaccia dovrebbe specificare quali eccezioni possono essere lanciate? Cosa succede se l'implementazione non ha bisogno di lanciare un'eccezione, o ha bisogno di lanciare altre eccezioni? Non c'è modo, a livello di interfaccia, di sapere quali eccezioni si può desiderare di lanciare.
...
Per 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ì cattivi (e non ho bisogno di essere venduto sui vizi dei codici di errore), c'è un'altra alternativa? Qual è lo stato attuale (o presto) dello stato dell'arte per la gestione degli errori che soddisfa i requisiti delle best practice come sopra descritto, ma non si basa sul codice di chiamata che controlla il valore restituito dai codici di errore?