GOTO

Da Wikipedia, l'enciclopedia libera.

In informatica, GO TO o GOTO (letteralmente "vai a") è un'istruzione di controllo del flusso di esecuzione. Essa è prevista in vari linguaggi di programmazione e consente di effettuare salti incondizionati da un punto all'altro del codice. In passato veniva spesso impiegata, tuttavia il suo utilizzo risultava spesso improprio (spaghetti code), rendendo illeggibile o di difficile comprensione un algoritmo o una procedura.


Questa istruzione è presente in Fortran, ALGOL, COBOL, SNOBOL, BASIC, Lisp, C, C++, Pascal, Perl, PHP (dalla versione 5.3) e molti altri meno noti. In Assembly, ed in generale nei linguaggi a basso livello, è un'istruzione fondamentale per controllare il flusso delle istruzioni (ed adattarsi ai linguaggi di programmazione che non ne fanno volutamente uso).

Negli assembly essa corrisponde ad un'istruzione di salto e può essere chiamata con nomi diversi: BRA (da "branch"), JP, JMP o JUMP con tutte le loro varianti condizionali (zero, nonzero, carry, ecc.)

Era molto in voga nei linguaggi (ormai obsoleti) legati al numero di riga, come il BASIC. La sintassi era:

GOTO numero di riga

Altri linguaggi senza numeri di riga, come il C o il PHP, utilizzano delle etichette che identificano l'indirizzo di codice a cui si vuole saltare.

Nei linguaggi ad alto livello può essere usata per uscire rapidamente da cicli profondamente nidificati. Ai giorni nostri l'uso di questa istruzione in tali linguaggi è generalmente considerato indice di cattiva programmazione (il cosiddetto "spaghetti code") perché viola le basi della programmazione strutturata.

Come dimostrato dal teorema di Böhm-Jacopini, un'attenta scrittura del codice può evitare di ricorrere a istruzioni GOTO, anche se è a volte necessario introdurre variabili aggiuntive o un ulteriore costrutto logico. L'assenza di GOTO rende comunque il codice più facile da analizzare.

Tuttavia, in linguaggi che non prevedano le eccezioni, oppure nella scrittura di sistemi operativi GOTO può essere una valida scelta nel caso di rollback di operazioni o deallocazione di risorse allocate attraverso passi successivi, quando in uno di tali passi si verifichi una condizione di errore. Il codice sorgente del kernel Linux è ricco di GOTO, spesso finalizzate a tale scopo.

Esempi[modifica | modifica sorgente]

I seguenti esempi stampano tutti a schermo 10 righe numerate progressivamente

Linguaggio BASIC[modifica | modifica sorgente]

Esempio di utilizzo dell'istruzione goto

 10 LET i = 1
 20 PRINT i
 30 LET i = i + 1
 40 IF i < 10 THEN GOTO 20

Esempio di programmazione strutturata senza goto

 10 LET i = 1
 20 DO
 30 PRINT i
 40 LET i = i + 1
 50 LOOP WHILE i < 10

Linguaggio C/C++[modifica | modifica sorgente]

Esempio di utilizzo dell'istruzione goto

 int i = 1;
 etichetta:
 printf("riga %d\n", i++);
 if (i < 10) goto etichetta;

Esempio di programmazione strutturata senza goto

 int i = 1;
 do {
 printf("riga %d\n", i++);
 } while (i < 10);

Curiosità[modifica | modifica sorgente]

Nel videogioco Star Wars: Knights of the Old Republic II: The Sith Lords esiste un personaggio chiamato G0-T0 o Goto, che è un droide con problemi di programmazione.

Voci correlate[modifica | modifica sorgente]

Collegamenti esterni[modifica | modifica sorgente]

informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica