Categorie
Javascript Programmazione

{JS} Costrutto try, catch e finally & newError() – Gestire le eccezioni

Cos’è un eccezione?

Un’eccezione è un errore che si verifica a runtime, quindi durante l’esecuzione di uno script, dovuto ad un’operazione non consentita.
Una variabile non definita o la chiamata ad un metodo che non esistente sono esempi di errori quindi “eccezioni”.

Note: Non rientrano tra le eccezioni gli errori derivanti da sintassi non corretta es. mancata chiusura di una parentesi o dei doppi apici in una stringa.

Costrutto per la gestione

Le tre istruzioni try, catch & finally, formano il costrutto tramite il quale saremo in grado di intercettare eventuali eccezioni e gestirle.

try {
	// Blocco di codice
} catch(e) {
	// Gestione dell'eccezione
} finally {
   // Blocco di codice
}

try

L’istruzione try pone sotto controllo, prova ad eseguire, il blocco di codice in esso incluso.
Se il blocco di codice, contenuto nell’istruzione try, viene correttamente eseguito, l’istruzione catch ed il suo contenuto, vengono saltati.

catch

Al contrario, se il codice contenuto nel blocco di istruzione dell’istruzione try generà un errore, il proseguo dello script passa all’istruzione catch.

(e)

Al verificarsi dell’eccezione il sistema genera un oggetto contenente informazioni sul problema riscontrato, questo potrà essere analizzato all’interno del blocco di codice catch che gestisce l’eccezione.

Le proprietà di questo oggetto sono due:

nameidentifica il tipo di eccezione
messageindica il messaggio specifico dell’eccezione verificatasi
...
}catch(e){
console.log("Nome errore: " + e.name);
console.log("Messaggio errore: " + e.message);
}
...

In questo esempio proviamo a richiamare un metodo inesistente, metodoInesistente(), al fine di verificare la gestione dell’eccezione generata dall’invocazione del metodo e le relative informazioni/proprietà stampate in console relative alle proprietà dello oggetto-eccezione.

finally

La clausola, istruzione opzionale, finally consente di specificare un blocco di codice da eseguire in ogni caso anche se si verificano eccezioni.

var x = 0;

try {
	funzione();
	x = x + 1;
} catch(e) {
	console.log(e.message);  // func is not defined
} finally {
	x = x - 1;
}

console.log(x);  // -1

Nell’esempio qui sopra, il blocco di codice all’interno di try viene saltato ed il proseguo dello script passa al blocco catch;
il blocco di codice contenuto all’interno di catch, che gestisce l’eccezione, stampa il messaggio d’errore: “funzione is not defined” ;
in fine il blocco di codice contenuto in finally esegue un azione nonostante si sia verificato l’errore.

Note: 
1. L'istruzione successiva alla chiamata a funzione(), che ha generato l'eccezione, non viene eseguita. Quindi, viene saltato l'intero blocco di codice.
2. E' importante precisare che il blocco di codice contenuto all'interno dell'istruzione finally sarà comunque eseguito anche nel caso in cui il codice contenuto all'interno di try non generi alcuna eccezione.

throw new Error()

Potremmo avere l’esigenza che, in una determinata funzione, nel caso in cui la sua esecuzione fallisca, venga restituito un avviso-d’errore particolare /personalizzato.

Funzione

function nuovaFunzione(){
if (condizione==true){
// Blocco istruzioni
} else {
throw new Error('L'esecuzione della funzione nuovaFunzione() è fallita.');
}

Così com’è, se provassimo a lanciare la nostra funzione e la condizione risultasse falsa, non accadrebbe nulla; questo perché all’interno della nostra funzione abbiamo solo predisposto l’errore da mostrare nel caso in cui essa fosse sottoposta al controllo di eventuali errori mediante il costrutto try e catch.

new Error()

Error() è un oggetto specifico per la creazione di eccezioni e deve essere invocato sempre precedendolo con la parola chiave “throw”.

throw new Error(‘Required’);eccezione mediante l’oggetto Error

E’ inoltre possibile creare eccezioni omettendolo:

throw 'Error2';eccezione con valore stringa
throw 42;eccezione con valore numerico
throw true;eccezione con valore booleano

Costrutto gestione eccezioni

try {
nuovaFunzione();
} catch(e) {
console.error(e);
}

Con “try” proviamo ad invocare la funzione; se la sua esecuzione fallisce, mediante l’istruzione “catch” e l’oggetto-eccezione autogenerato “e”, intercettiamo l’errore ed in questo caso specifico l’errore personalizzato precedentemente creato.
L’errore è contenuto all’interno dell’oggetto “e” sarà quindi sufficiente stampare a video esso stesso.

console.error().error() è un metodo dell’oggetto console per scrive un messaggio di errore al suo interno.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *