Goto

Goto

L’instruction goto (de l’anglais go to, en français aller à) est une instruction présente dans de nombreux langages de programmation. Elle est utilisée pour réaliser des sauts inconditionnels dans un programme. L’exécution est renvoyée vers une étiquette ou label, qui est soit un numéro de ligne donné, soit une étiquette déclarée, selon le langage.

L’instruction goto, directement héritée des instructions de saut des langages machines, était nécessaire dans les langages primitifs (Fortran pré-90, BASIC) comme instruction de base permettant de réaliser des boucles et autres structures de contrôles.

Depuis la révolution de la programmation structurée des années 1970, l’instruction goto n’est plus guère appréciée des programmeurs modernes, car elle rend souvent les programmes plus difficiles à comprendre et à maintenir (on parle dans ce cas de programmation spaghetti). On utilise plus généralement des structures comme les sauts conditionnels (if .. then .. else ..) ou les boucles (for, whileetc.) qui font partie intégrante de tous les langages de programmation modernes.

Dans certains langages, d’autres instructions effectuent des sauts inconditionnels et remplacent quelques usages de l’instruction goto. C’est le cas des instructions comme continue ou break, que l’on trouve dans les langages dérivés du C, et des exceptions. On peut obtenir un comportement similaire avec le call/cc de Scheme.

Sommaire

Langages

L’instruction goto (ou équivalent) apparaît notamment dans les langages suivants :

L’instruction goto est un mot réservé en Java mais il est interdit de l’utiliser (cela a pour effet, par exemple, d’empêcher l’emploi de goto comme nom de variable).

Émulation

En 1966, le théorème de Böhm et Jacopini a démontré que tout programme comportant des goto pouvait être transformé en programme n’utilisant que des branchements conditionnels (if, then, else) ou des boucles (while condition do instructions), éventuellement en dupliquant des portions de codes et/ou en utilisant des variables intermédiaires. Plus tard les deux auteurs ont montré que les branchements conditionnels pouvaient eux mêmes être remplacés par des boucles.

Méthode de Jacopini

Bien que des langages ne comportent pas de goto, certains programmeurs sont convaincus (à tort ou à raison) de l’intérêt de les employer. Il s’est alors développé une méthode d’émulation. Concrètement, il s’agit de placer le label dans une variable et de la chercher durant tout le code. Ainsi, on a :

% Début de programme
goto = -1  % pas de saut
while (goto < 0) {
  % zone sans libellé
}

if (goto == 0) {
  % Toute la partie de libellé 0
}
else if (goto == 1) {
  % Toute la partie de libellé 1
}
% ...
else if (goto == n) {
  % Toute la partie de libellé n
}

On voit d’abord que les libellés peuvent être des chaînes ou des nombres, y compris des expressions. Il est possible d’aller plus loin et de ne pas se restreindre à un ensemble de points pour représenter les libellés. On peut ainsi les représenter par des ensembles d’intervalles, de plans et d’hyperplans. L’inconvénient de cette méthode est qu’il faut attendre que toutes les instructions de la boucles while soient terminées pour que le saut inconditionnel soit réalisé.

Exceptions

Les fonctions setjmp et longjmp, disponibles sur certains systèmes d’exploitation, permettent aussi d’émuler l’instruction goto. Mais ces instructions de saut inconditionnel sont surtout utilisées pour implémenter un système de gestion des exceptions.

L’utilisation d’exception est par exemple un pattern courant en Python pour sortir d’une double boucle :

try :
    for i in range(10) :
        for j in range(10) :
            if TABLE[i][j] == 1:
                raise StopIteration
except StopIteration :
    pass

Anecdotes

Les premières versions d’Algol 60 (en) réalisées en France avaient traduit tous les mots clés du langage et tout naturellement l’instruction goto s’appelait allera (« aller à »).

Goto est un authentique patronyme japonais et Donald Knuth plaisantait sur ce pauvre Monsieur Goto que tout le monde rejetait.

Il existe également un langage de programmation exotique parodique, le GOTO++, qui se déclare orienté GOTO[1].

Voir aussi

Liens externes

Références


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Goto de Wikipédia en français (auteurs)

Игры ⚽ Поможем решить контрольную работу

Regardez d'autres dictionnaires:

  • GOTO — o GO TO (ir a en inglés) es una instrucción muy común en los lenguajes de programación con el objetivo de controlar el flujo del programa. El efecto de su versión más simple es transferir sin condiciones la ejecución del programa a la etiqueta o… …   Wikipedia Español

  • GOTO — (англ. go to  «перейти к»)  в некоторых языках программирования  оператор безусловного перехода (перехода к определённой точке программы, обозначенной номером строки либо меткой). В более широком смысле, под «GOTO»… …   Википедия

  • Goto — is a statement found in many computer programming languages. It is a combination of the English words and . When executed it causes an unconditional transfer of control (a jump ) to another statement. The jumped to statement is specified using… …   Wikipedia

  • goto — (от англ. go to  «перейти к»)  оператор безусловного перехода (перехода к определённой точке программы, обозначенной номером строки либо меткой) в некоторых языках программирования. В некоторых языках оператор безусловного перехода …   Википедия

  • GOTO — L instruction goto (de l anglais go to, en français aller à) est une instruction présente dans de nombreux langages de programmation. Elle est utilisée pour réaliser des sauts inconditionnels dans un programme. L exécution est renvoyée vers une… …   Wikipédia en Français

  • Gotō — Goto steht für: Sprunganweisung, einen Sprung in der Programmierung Goto (Teleskop), eine Vorrichtung an Teleskopen Verein der Künste Hauptsitz in Österreich Gotō (五島) steht außerdem für: Gotō Inseln, eine Inselgruppe in der japanischen Präfektur …   Deutsch Wikipedia

  • Goto — steht für: Sprunganweisung, einen Sprung in der Programmierung Goto (Teleskop), eine Vorrichtung an Teleskopen Gotō (五島) steht außerdem für: Gotō Inseln, eine Inselgruppe in der japanischen Präfektur Nagasaki Gotō (Nagasaki), eine Stadt auf… …   Deutsch Wikipedia

  • Gotō — shi (五島市) Plage d Omaha à Gotō Administration Pays Japon Région Kyūshū Préfecture …   Wikipédia en Français

  • Goto — puede referirse a: GOTO (ir a), instrucción de varios lenguajes de programación; Gotō, apellido japonés; Islas Gotō, archipiélago japonés. Esta página de desambiguación cataloga artículos relacionados con el mismo título. Si llegaste aquí a… …   Wikipedia Español

  • GOTO — o GO TO (ir a en inglés) es una sentencia o instrucción muy común en los lenguajes de programación con el objetivo de controlar el flujo del programa. El efecto de su versión más simple es transferir sin condiciones la ejecución del programa a la …   Enciclopedia Universal

  • goto — |ô| s. m. 1.  [Informal] Glote. 2. O que causa sufocação. 3. dar no goto: entrar na glote (a comida ou a bebida). 4.  [Figurado] Causar estranheza; agradar. • Plural: gotos |ô| …   Dicionário da Língua Portuguesa

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”