Fallimenti e risultati

In alcuni casi non è detto che una computazione vada a buon fine (ad es. se abbiamo bisogno di dei dati da un server remoto ma la connessione si interrompe, oppure se un valore eccede un certo intervallo).

È necessario esprimere e strutturare queste situazioni nei nostri programmi, in modo che anche in caso di stati di errore il programma si comporti in modo prevedibile (e magari eviti di farsi killare dal sistema operativo perché ha iniziato ad andare a spasso nella RAM, ad esempio).

Le eccezioni

L’idea alle spalle delle eccezioni è che una condizione eccezionale causi un trasferimento diretto del controllo ad un gestore delle eccezioni (exception handler) definito priormente in un qualche punto del call stack del programma (definito prima, detto in soldoni).

Gestire le eccezioni

Alcuni linguaggi forniscono un costrutto per gestire le eccezioni noto come try-catch.

try {
	do_something;
} catch (someError) {
	do_something_else;
}

Il funzionamento è semplice: il programma prova ad eseguire le istruzioni nel blocco try, nel caso insorga un errore lo passa al blocco catch che lo gestirà.

Il codice contenuto nel blocco try non viene eseguito atomicamente: viene eseguito fino all’insorgere dell’errore, a quel punto viene sostituito dal codice contenuto nel blocco catch.