GOTO

Da Wikipedia, l'enciclopedia libera.
Vai a: navigazione, cerca

In informatica, l'istruzione GO TO o GOTO (letteralmente "vai a") consente in vari linguaggi di effettuare salti incondizionati da un punto all'altro del codice. Spesso veniva usato in modo improprio (spaghetti code), rendendo illeggibile o di difficile comprensione l'algoritmo.

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. Questo è alla base della programmazione strutturata.

Questa istruzione è presente in Fortran, ALGOL, COBOL, SNOBOL, BASIC, Lisp, C, C++, Pascal, Perl 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 il comando è chiamato 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 legati al numero di riga come il BASIC, infatti la sintassi era: GOTO numero di riga. Altri linguaggi senza numeri di riga, come il C, utilizzano delle etichette che identificano l'indirizzo di codice a cui si vuole saltare.

Ai giorni nostri l'uso di questa istruzione in linguaggi ad alto livello è generalmente considerato indice di cattiva programmazione (il cosiddetto "spaghetti code"). Tuttavia, in linguaggi che non prevedano le eccezioni, 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.

Indice

[modifica] Esempi

I seguenti esempi stampano tutti a schermo 10 righe numerate progressivamente

[modifica] Linguaggio BASIC

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

[modifica] Linguaggio C/C++

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);

[modifica] Curiosità

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.

[modifica] Voci correlate

[modifica] Collegamenti esterni

Strumenti personali
Namespace

Varianti
Azioni
Navigazione
Comunità
Stampa/esporta
Strumenti
Altre lingue