GOTO
Da Wikipedia, l'enciclopedia libera.
In informatica, l'istruzione GO TO o GOTO consente in vari linguaggi di effettuare salti da un punto all'altro del codice. Spesso veniva usato in modo improprio (spaghetti code), rendendo illegibile o di difficile comprensione l'algoritmo.
Come dimostrato dal teorema di Jacopini-Bohm, 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 è 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 BRA (da "branch"), JP, JMP o JUMP con tutte le loro varianti condizionali (zero, nonzero, carry, ecc.) la funzione è sempre la stessa "saltare ad un'etichetta'. Nell'assembly per PIC (dei microcontrollori con architettura Harvard definito RISC della ditta Microchip technology) l'istruzione GOTO è presente.
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 è generalmente considerato indice di cattiva programmazione (spaghetti code). Tuttavia, in linguaggi che non prevedano le eccezioni, GOTO può essere una valida scelta nel caso di rollback di operazioni e deinizializzazione 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] Voci correlate
- COMEFROM Una struttura di controllo che si propone di essere più oscura del GOTO