Generare eccezioni

Durante l’esecuzione di un programma può essere utile generare delle eccezioni per gestire alcune situazioni particolari e/o anomale. In Visual Basic .NET è possibile generare un’eccezione tramite la seguente istruzione:

dove classeEccezione(proprietàMessage) serve per personalizzare l’eccezione da generare. Vediamo come utilizzare questa istruzione con un semplice esempio.

VB.NETEsempio
Si consideri il codice seguente:

Nel codice  di sopra nella Sub associata al clic sul bottone Esegui, all’interno del ciclo Do..While, viene prelevata una sequenza di dieci numeri. Ciascun numero della sequenza viene fornito in input utilizzando una InputBox (riga 8):

Throw_01

e ogni volta l’utente conferma l’input tramite il clic sul bottone OK.

Problema. Supponiamo si voglia avere anche la possibilità di annullare l’input dell’intera sequenza tramite il clic sul bottone Annulla e ritornare così al Form nella situazione in cui si era prima del clic sul bottone Esegui.

Soluzione proposta. Per questo problema possono essere adottate diverse soluzioni, una di queste consiste proprio nello sfruttare la possibilità di generare un’eccezione quando si fa clic sul bottone Annulla. Si ricorda che quando si clicca sul bottone Annulla, la InputBox restituisce al chiamante una stringa vuota. La soluzione proposta è la seguente:

Nel codice precedente è stato evidenziato il blocco Try..Catch e in particolare nel blocco Try la riga di codice con cui viene generata l’eccezione (riga 12), che viene riscritta di seguito:

ApplicationException è la classe di appartenenza dell’eccezione che viene generata (che è la classe delle eccezioni generate quando si verifica un errore non irreversibile dell’applicazione), mentre la stringa passata tra le parentesi (facoltativa) rappresenta il testo della proprietà Message dell’eccezione generata.

Nella soluzione proposta, quindi, quando la InputBox restituisce una stringa vuota viene generata un’eccezione e nel blocco Catch, che gestisce tale eccezione, viene chiesta conferma all’utente su quale operazione eseguire: se procedere interrompendo l’operazione di input della sequenza (in questo caso si chiede all’utente un’ulteriore conferma) o se procedere continuando con il prelevamento della sequenza, riprendendo dall’ultimo numero su cui si è avuta l’interruzione (si fa notare che la stringa vuota viene restituita dalla InputBox anche quando si clicca sul bottone OK senza aver fornito un input;  pertanto, riprendendo a prelevare la sequenza dall’ultimo numero su cui è avvenuta l’interruzione, viene gestita anche questa situazione).

Nella gestione delle richieste di conforma all’utente su come procedere, è stato sfruttato il valore restituito dalle MsgBox che, si ricorda, dipende da quale bottone l’utente clicca nella MsgBox.

P.S. Nel codice precedente andrebbe gestito anche l’errore di runtime che può verificarsi nella riga 14, nel caso di un input non valido che rende impossibile la conversione di tipo implicita dal formato stringa al formato numero. Questo problema è stato già risolto in un altro post a cui si rimanda per approfondimenti: link. Per completezza qui di seguito viene riportato, senza spiegazione, il codice completo anche di quest’ultima gestione.