Quando si programma in Gambas molto spesso si fa l'errore di dare per scontato che una determinata azione andrà sempre a buon fine e che pertanto sarà eseguita in tutti i casi.
Essendo Gambas un linguaggio diverso dai suoi simili di più basso livello, tipo C, non si ha molto la cognizione della gestione degli errori e delle eventuali anomalie che possono presentarsi da situazione a situazione e da macchina a macchina.
Non prevedere gli errori significa dare in mano all'utente finale un programma instabile che potrebbe crashare miseramente per una nostra leggerezza nel codice.
Vediamo un pò gli strumenti che il gambero offre per cercare, intercettare e gestire gli errori.
TRY
Try, che letteralmente vuol dire "prova", è un'istruzione utile a intercettare eventuali errori che potrebbero presentarsi sul codice che proviamo ad eseguire.
Immaginiamo ad esempio di voler aprire un file. Aprire un file è un operazione che può fallire per diversi motivi, mancanza di spazio in memoria, file inesistente o errori di sintassi del codice. Sarebbe per buona norma pertanto usare try prima del codice di gestione.
Come facciamo allora a scoprire per quale motivo il nostro codice non ha funzionato?
Per tale scopo ci viene in aiuto il successivo strumento: Error.
ERROR
Error non è un'istruzione ma è una variabile di tipo booleano (ovvero che può assumere solo il valore TRUE, cioè 1 logico, o FALSE, cioè 0 logico). Essa avrà valore 1 se nel codice analizzato da try si è presentato un errore mentre varrà 0 se il codice ha svolto il suo lavoro.
Error non è solo una variabile ma con lo stesso nome si indica anche una classe, sempre correlata all'esecuzione di try, che gestisce l'errore in ogni suo aspetto.
Tra le sue proprietà vediamo in particolare:
1) Code:
Richiamabile da Error.Code, restituisce il codice del sorgente Gambas che ha generato l'errore;
2) Text:
Richiamabile da Error.Text, restituisce il testo dell'errore così come si presenta al sistema;
3) Where:
Richiamabile con Error.Where, indica la parte del codice (Form, classe, modulo, rigo) in cui è avvenuto l'errore.
FINALLY
Finally è una particolare istruzione che posta prima di un blocco di codice forza l'interprete ad eseguirlo anche se si presentano errori. Qualora dovesse presentarsi un errore, esso sarà ignorato e si propagherà fino alla fine del blocco mentre il codice sarà eseguito, dove possibile, o ignorato. Per intercettare alla fine gli errori presentatisi si ricorre ad un'altra istruzione: Catch
CATCH
Catch è posto prima di un blocco di codice adibito alla gestione degli errori solitamente propagatisi per via della presenza di Finally.
Nel prossimo post vedremo alcuni esempi dell'uso di quste istruzioni che dovrebbero diventare uno strumento da utilizzare in maniera adeguata nei propri codici.