In JavaScript possiamo implementare una gestione alternativa degli errori nelle funzioni utilizzando i loro valori di ritorno.
Solitamente utilizziamo un valore predefinito o solleviamo un'eccezione al verificarsi di un errore.
'use strict';
const myFunctionWithThrow = dataObject => {
if(typeof dataObject !== 'object') {
throw new Error('Invalid argument.');
}
};
const myFunctionWithValue = dataObject => {
if(typeof dataObject !== 'object') {
return null;
}
};
Nel primo caso, l'esecuzione del codice viene interrotta, e nel secondo caso abbiamo un valore null che di fatto non può essere riutilizzato al di fuori della verifica che effettuiamo quando eseguiamo la funzione e che soprattutto non contiene alcuna informazione.
Possiamo invece usare l'oggetto Error in modo diverso: invece di sollevare un'eccezione e bloccare tutto il codice che segue, possiamo usarlo come valore di ritorno della funzione.
'use strict';
const myFunction = dataObject => {
if(typeof dataObject !== 'object') {
return new Error('Invalid argument.');
}
};
Quindi possiamo effettuare la seguente verifica:
'use strict';
const result = myFunction();
if(result instanceof Error) {
// Gestione dell'errore
}
In questo modo non blocchiamo il flusso del codice e abbiamo a disposizione un valore semantico che possiamo riutilizzare, ad esempio nel nostro sistema di logging.