<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://jardin.cscsp.ch/index.php?action=history&amp;feed=atom&amp;title=GOTO</id>
	<title>GOTO - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://jardin.cscsp.ch/index.php?action=history&amp;feed=atom&amp;title=GOTO"/>
	<link rel="alternate" type="text/html" href="https://jardin.cscsp.ch/index.php?title=GOTO&amp;action=history"/>
	<updated>2026-04-12T01:53:59Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://jardin.cscsp.ch/index.php?title=GOTO&amp;diff=932&amp;oldid=prev</id>
		<title>imported&gt;Geoide: rimossi wl secondo linee guida vedi Wikipedia:Wikilink#Wikilink nei titoli di sezioni e sottosezioni</title>
		<link rel="alternate" type="text/html" href="https://jardin.cscsp.ch/index.php?title=GOTO&amp;diff=932&amp;oldid=prev"/>
		<updated>2024-10-31T20:05:20Z</updated>

		<summary type="html">&lt;p&gt;rimossi wl secondo linee guida vedi &lt;a href=&quot;https://en.wikipedia.org/wiki/Wikilink#Wikilink_nei_titoli_di_sezioni_e_sottosezioni&quot; class=&quot;extiw&quot; title=&quot;wikipedia:Wikilink&quot;&gt;Wikipedia:Wikilink#Wikilink nei titoli di sezioni e sottosezioni&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{nd|altri significati|Goto}}&lt;br /&gt;
{{Citazione&lt;br /&gt;
|Il codice che utilizza istruzioni goto è generalmente più difficile da capire e da gestire rispetto al codice senza goto. Anche se non siamo dogmatici riguardo alla questione, risulta che gli statement goto debbano essere usati raramente, se non per niente. | Lingua = it&lt;br /&gt;
|Brian Kernighan &amp;amp; Dennis Ritchie, &amp;#039;&amp;#039;The C Programming Language&amp;#039;&amp;#039;&lt;br /&gt;
|Code that relies on goto statements is generally harder to understand and to maintain than code without gotos. Although we are not dogmatic about the matter, it does seem that goto statements should be used rarely, if at all.|lingua=en&lt;br /&gt;
|lingua2=it&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
In [[informatica]],  &amp;#039;&amp;#039;&amp;#039;GO TO&amp;#039;&amp;#039;&amp;#039; o &amp;#039;&amp;#039;&amp;#039;GOTO&amp;#039;&amp;#039;&amp;#039; ({{Lett|vai a}}) è un&amp;#039;[[istruzione (informatica)|istruzione]] di [[controllo di flusso]] di [[esecuzione (informatica)|esecuzione]]. Essa è prevista in vari [[linguaggio di programmazione|linguaggi di programmazione]] e consente di effettuare salti incondizionati da un punto all&amp;#039;altro del [[codice sorgente|codice]]. In passato veniva spesso impiegata, tuttavia il suo utilizzo risultava spesso improprio, rendendo illeggibile o di difficile comprensione un [[algoritmo]] o una [[Funzione (informatica)|procedura]] e dando vita a quelli che in gergo vengono chiamati &amp;#039;&amp;#039;[[spaghetti code]].&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Descrizione ==&lt;br /&gt;
&lt;br /&gt;
Questa istruzione è presente in [[Fortran]], [[ALGOL]], [[COBOL]], [[SNOBOL]], [[BASIC]], [[Lisp]], [[Linguaggio C|C]], [[C++]], [[Pascal (linguaggio)|Pascal]], [[Perl]], [[PHP]] (dalla versione 5.3) e molti altri meno noti. In [[Assembly]], ed in generale nei [[Linguaggio di programmazione a basso livello|linguaggi a basso livello]], è un&amp;#039;istruzione fondamentale per controllare il flusso delle istruzioni (ed adattarsi ai linguaggi di programmazione che non ne fanno volutamente uso).&lt;br /&gt;
&lt;br /&gt;
Negli assembly essa corrisponde ad un&amp;#039;istruzione di salto e può essere chiamata con nomi diversi: BRA (da &amp;quot;branch&amp;quot;), JP, JMP o JUMP con tutte le loro varianti condizionali (zero, nonzero, carry, ecc.)&lt;br /&gt;
&lt;br /&gt;
Era molto in voga nei linguaggi (ormai obsoleti) legati al numero di riga, come il [[BASIC]]. La sintassi era: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=basic4gl&amp;gt;&lt;br /&gt;
GOTO numero di riga&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Altri linguaggi senza numeri di riga, come il [[C (linguaggio)|C]] o il [[PHP]], utilizzano delle etichette che identificano l&amp;#039;indirizzo di codice a cui si vuole saltare.&lt;br /&gt;
&lt;br /&gt;
Nei [[Linguaggio di programmazione ad alto livello|linguaggi ad alto livello]] può essere usata per uscire rapidamente da cicli profondamente nidificati.&lt;br /&gt;
Ai giorni nostri l&amp;#039;uso di questa istruzione in tali linguaggi è generalmente considerato indice di cattiva programmazione (il cosiddetto &amp;quot;[[spaghetti code]]&amp;quot;) perché viola le basi della [[programmazione strutturata]].&lt;br /&gt;
&lt;br /&gt;
Come dimostrato dal [[teorema di Böhm-Jacopini]], un&amp;#039;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&amp;#039;assenza di GOTO rende comunque il codice più facile da analizzare.&lt;br /&gt;
&lt;br /&gt;
Tuttavia, in linguaggi che non prevedano le eccezioni oppure nella scrittura di sistemi operativi, i salti incondizionati nel codice possono 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 finalizzati a tale scopo.&lt;br /&gt;
&lt;br /&gt;
== Esempi ==&lt;br /&gt;
I seguenti esempi stampano tutti a schermo 10 righe numerate progressivamente&lt;br /&gt;
&lt;br /&gt;
=== Linguaggio BASIC ===&lt;br /&gt;
Esempio di utilizzo dell&amp;#039;istruzione &amp;#039;&amp;#039;&amp;#039;goto&amp;#039;&amp;#039;&amp;#039;&amp;lt;syntaxhighlight lang=basic4gl&amp;gt;&lt;br /&gt;
 10 LET i = 1&lt;br /&gt;
 20 PRINT i&lt;br /&gt;
 30 LET i = i + 1&lt;br /&gt;
 40 IF i &amp;lt; 10 THEN GOTO 20&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Esempio di programmazione strutturata senza &amp;#039;&amp;#039;&amp;#039;goto&amp;#039;&amp;#039;&amp;#039;&amp;lt;syntaxhighlight lang=basic4gl&amp;gt;&lt;br /&gt;
 10 LET i = 1&lt;br /&gt;
 20 DO&lt;br /&gt;
 30 PRINT i&lt;br /&gt;
 40 LET i = i + 1&lt;br /&gt;
 50 LOOP WHILE i &amp;lt; 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linguaggio C/C++ ===&lt;br /&gt;
Esempio di utilizzo dell&amp;#039;istruzione &amp;#039;&amp;#039;&amp;#039;goto&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
 int i = 1;&lt;br /&gt;
 etichetta:&lt;br /&gt;
 printf(&amp;quot;riga %d\n&amp;quot;, i++);&lt;br /&gt;
 if (i &amp;lt; 10) goto etichetta;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Esempio di programmazione strutturata senza &amp;#039;&amp;#039;&amp;#039;goto&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 int i = 1;&lt;br /&gt;
 do {&lt;br /&gt;
    printf(&amp;quot;riga %d\n&amp;quot;, i++);&lt;br /&gt;
 } while (i &amp;lt; 10);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;oppure&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for(int i = 0; i &amp;lt; 10; i++)&lt;br /&gt;
    printf(&amp;quot;riga %d\n&amp;quot;, i);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Voci correlate ==&lt;br /&gt;
* {{Citazione necessaria|[[COMEFROM]] Una struttura di controllo che si propone di essere &amp;#039;&amp;#039;più oscura&amp;#039;&amp;#039; del GOTO}}&lt;br /&gt;
&lt;br /&gt;
== Collegamenti esterni ==&lt;br /&gt;
* {{FOLDOC|goto|goto}}&lt;br /&gt;
* [https://web.archive.org/web/20070703050443/http://www.acm.org/classics/oct95/ Go To Statement Considered harmful (Edsger W. Dijkstra)] Testo chiave nelle discussioni sulla [[programmazione strutturata]] e l&amp;#039;uso del GOTO.&lt;br /&gt;
&lt;br /&gt;
{{Portale|informatica}}&lt;br /&gt;
&lt;br /&gt;
[[Categoria:Concetti di programmazione]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Geoide</name></author>
	</entry>
</feed>