{"id":198,"date":"2010-01-22T00:14:00","date_gmt":"2010-01-22T00:14:00","guid":{"rendered":"http:\/\/e-ware.org\/blog\/?p=198"},"modified":"2010-01-22T00:14:00","modified_gmt":"2010-01-22T00:14:00","slug":"didattica-gambas-gestione-degli-errori","status":"publish","type":"post","link":"http:\/\/e-ware.org\/blog\/didattica-gambas-gestione-degli-errori\/","title":{"rendered":"Didattica Gambas: Gestione degli errori"},"content":{"rendered":"<div><span><br \/><\/span><\/div>\n<div><span>Quando si programma in Gambas molto spesso si fa l&#8217;errore di dare per scontato che una determinata azione andr\u00e0 sempre a buon fine e che pertanto sar\u00e0 eseguita in tutti i casi.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Essendo Gambas un linguaggio diverso dai suoi simili di pi\u00f9 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.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Non prevedere gli errori significa dare in mano all&#8217;utente finale un programma instabile che potrebbe crashare miseramente per una nostra leggerezza nel codice.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Vediamo un p\u00f2 gli strumenti che il gambero offre per cercare, intercettare e gestire gli errori.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span>TRY<\/span><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Try, che letteralmente vuol dire &#8220;prova&#8221;, \u00e8  un&#8217;istruzione utile a intercettare eventuali errori che potrebbero presentarsi sul codice che proviamo ad eseguire.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Immaginiamo ad esempio di voler aprire un file. Aprire un file \u00e8 un operazione che pu\u00f2 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. <\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Come facciamo allora a scoprire per quale motivo il nostro codice non ha funzionato?<\/span><\/div>\n<div><span>Per tale scopo ci viene in aiuto il successivo strumento: Error.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span>ERROR<\/span><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Error non \u00e8 un&#8217;istruzione ma \u00e8 una variabile di tipo booleano (ovvero che pu\u00f2 assumere solo il valore TRUE, cio\u00e8 1 logico, o FALSE, cio\u00e8 0 logico). Essa avr\u00e0 valore 1 se nel codice analizzato da try si \u00e8 presentato un errore mentre varr\u00e0 0 se il codice ha svolto il suo lavoro. <\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Error non \u00e8 solo una variabile ma con lo stesso nome si indica anche una classe, sempre correlata all&#8217;esecuzione di try, che gestisce l&#8217;errore in ogni suo aspetto.<\/span><\/div>\n<div><span>Tra le sue propriet\u00e0 vediamo in particolare:<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>1) <\/span><b><span>Code<\/span><\/b><span>:<\/span><\/div>\n<div><span>Richiamabile da <\/span><i><span>Error.Code<\/span><\/i><span>, restituisce il codice del sorgente Gambas che ha generato l&#8217;errore;<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>2) <\/span><b><span>Text<\/span><\/b><span>:<\/span><\/div>\n<div><span>Richiamabile da <\/span><i><span>Error.Text<\/span><\/i><span>, restituisce il testo dell&#8217;errore cos\u00ec come si presenta al sistema;<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>3) <\/span><b><span>Where<\/span><\/b><span>:<\/span><\/div>\n<div><span>Richiamabile con <\/span><i><span>Error.Where<\/span><\/i><span>, indica la parte del codice (Form, classe, modulo, rigo) in cui \u00e8 avvenuto l&#8217;errore.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span>FINALLY<\/span><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Finally \u00e8 una particolare istruzione che posta prima di un blocco di codice forza l&#8217;interprete ad eseguirlo anche se si presentano errori. Qualora dovesse presentarsi un errore, esso sar\u00e0 ignorato e si propagher\u00e0 fino alla fine del blocco mentre il codice sar\u00e0 eseguito, dove possibile, o ignorato. Per intercettare alla fine gli errori presentatisi si ricorre ad un&#8217;altra istruzione: Catch<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><b><span>CATCH<\/span><\/b><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Catch \u00e8 posto prima di un blocco di codice adibito alla gestione degli errori solitamente propagatisi per via della presenza di Finally.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n<div><span>Nel prossimo post vedremo alcuni esempi dell&#8217;uso di quste istruzioni che dovrebbero diventare uno strumento da utilizzare in maniera adeguata nei propri codici.<\/span><\/div>\n<div><span><br \/><\/span><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Quando si programma in Gambas molto spesso si fa l&#8217;errore di dare per scontato che una determinata azione andr\u00e0 sempre a buon fine e che pertanto sar\u00e0 eseguita in tutti i casi. Essendo Gambas un linguaggio diverso dai suoi simili di pi\u00f9 basso livello, tipo C, non si ha molto la cognizione della gestione degli [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[52,23,2,4],"tags":[],"class_list":["post-198","post","type-post","status-publish","format-standard","hentry","category-didattica","category-gambas","category-gnulinux","category-opencode"],"views":1447,"_links":{"self":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts\/198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/comments?post=198"}],"version-history":[{"count":0,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts\/198\/revisions"}],"wp:attachment":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/media?parent=198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/categories?post=198"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/tags?post=198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}