Movimento 5 Stelle
 

21. Gestire le Eccezioni

Vedremo in questo capitolo gli strumenti che ActionScript 3 ci mette a disposizione per gestire in modo trasparente le eccezioni, quindi tutti gli eventi considerati non previsti e gli errori.

Per fare un pò di chiarezza, potremmo considerare una eccezione come la ricezione di una password di 20 caratteri quando il massimo consentito per la nostra applicazione è ad esempio 15, mentre potremmo considerare un errore come la ricezione di un tipo stringa quando invece attendiamo ad esempio un intero.

Tratterò le due varianti come equivalenti dal momento che entrambe producono un risultato non desiderato.
Ora vediamo i costrutti che ActionScript 3 ci fornisce :

try
{
	// Codice in cui si potrebbe verificare un'eccezione
}
catch (errore:ErroreUno)
{
	// Codice per gestire un eventuale eccezione di tipo "ErroreUno"
}
catch (errore:ErroreDue)
{
	// Codice per gestire un eventuale eccezione di tipo "ErroreDue"
}
finally
{
	// Codice che verrà eseguito in ogni caso
}

Il blocco try dovrà contenere il codice che potrebbe generare una potenziale eccezione.
Per ogni blocco try ci deve essere almeno un blocco catch pronto a catturare e gestire l'eccezione.

Per questo motivo è possibile utilizzare più di un blocco catch per ogni blocco try, in modo da poter catturare e gestire in blocchi separati ogni tipo di eccezione prevista.

Inoltre abbiamo il blocco finally che è facoltativo, utile ad esempio per effettuare operazioni di pulizia.

E' possibile utilizzare un numero indeterminato di blocchi try, a patto che siano separati o annidati fra di loro e che ognuno abbia il rispettivo blocco catch per la cattura dell'eccezione.

L'esempio seguente mostra come è possibile utilizzare dei blocchi annidati :

try
{
	try
	{
		// ...
	}
	catch (errore:*) // Cattura tutti i tipi di eccezione
	{
		// ...
	}
	finally
	{
		// ...
	}
}
catch (errore:ErroreUno)
{
	// Codice per gestire un eventuale eccezione di tipo "ErroreUno"

}
catch (errore:ErroreDue)
{
	// Codice per gestire un eventuale eccezione di tipo "ErroreDue"
}
finally
{
	// Codice che verrà eseguito in ogni caso
}

Questo tipo di gestione può tornare utile qualora si verificasse un'eccezione nel primo blocco catch o nel primo finally, per fare un esempio durante la chiusura di una connessione in risposta ad una eccezione catturata nel secondo try e così via.


Sollevare le eccezioni con throw

ActionScript 3 ci mette a disposizione un altro utilissimo strumento, la direttiva throw, che ci consente di sollevare delle eccezioni personalizzate.

Prima di procedere è necessario sapere che tutte le eccezioni sollevate, sia da noi che dalle API di Flash Player, sono in realtà istanze di una determinata classe, derivata dalla classe Error o dalla classe ErrorEvent.

Tutte le altre classi definite per la gestione di eccezioni più specifiche, derivano dalle due classi sopracitate, così se noi volessimo definire una nuova classe per gestire delle eccezioni personalizzate per la nostra applicazione, dovremmo derivare tale classe da una delle due classi madre Error o ErrorEvent.

Attraverso throw possiamo richiamare il costruttore delle classe desiderata, creando una nuova istanza che sarà poi catturata dal blocco catch adeguato, che prenderà come parametro un oggetto dello stesso tipo sollevato o derivato da esso.

try
{
	throw Error("Si è verificato un errore irreversibile!");
}
catch (errore:Error)
{
	trace(errore.message);
}
finally
{
	trace("Applicazione terminata!");
}

Il codice soprastante genera il seguente output :
Si è verificato un errore irreversibile!
Applicazione terminata!