Perché gestisci un errore che non si verifica mai?
La programmazione informatica si occupa di assoluti. Non esiste una cosa come dovrebbe , potrebbe e forse . O l'errore accadrà o non lo farà. L'aggiunta di codice di gestione degli errori per qualcosa che ha una probabilità dello 0% di verificarsi è l'odore del codice. Il buon codice gestisce il cambiamento dello 0,01% quando si verifica.
Un buon modo di pensarlo è come questo.
If you only add error handling for 99% of the possible problems, then there only needs to be 100 problems for the source code to have an unhandled problem.
Il codice sorgente Overtime crescerà per far fronte a migliaia di problemi ...
Non mescolare la gestione degli errori con la logica aziendale
Un problema che vedo sempre è il codice sorgente che è stato sparato con la gestione degli errori. Soprattutto in Java, dove la gestione delle eccezioni è imposta dall'errore del compilatore.
Rende difficile leggere quale sia l'intento di una funzione quando si dirama più volte per gestire tutti i diversi casi di errore.
Al contrario, separa la gestione degli errori in funzioni specializzate. Mantieni la funzione originale focalizzata su un singolo intento.
Ad esempio;
public Object getSerializableSafely(Bundle bundle, String name)
{
Object foo = bundle.getSerializable(name);
if (foo != null)
{
return foo;
}
else if (BuildConfig.DEBUG) {
throw new RuntimeException("Foo is null!");
}
return null;
}
public boolean Worker()
{
Object foo = getSerializableSafely(bundle, "foo");
if (foo == null)
{
return false;
}
// do work with foo
return true;
}
Ora, non c'è niente di sbagliato nel lanciare un'eccezione di runtime nei build di debug. Possono essere grandi risparmiatori di tempo perché portano il debugger giusto dove si trova il problema.
Il problema è cercare di creare funzioni come Worker
e aspettarsi che non falliscano mai. Segnalare vero / falso come risultato di un'operazione è molto meglio che avvolgere tutto in try / catch.
Se stavi utilizzando un'API di analisi XML. Vorresti che generasse un'eccezione se la alimentavi con XML non valido o vuoi che la funzione di analisi restituisca false? Mantieni la gestione delle eccezioni in relazione a casi che sono eccezionali e utilizza i risultati restituiti per comunicare il risultato di una funzione.