Goto
Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Introduction

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 (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...), directement héritée des instructions de saut des langages machines, était nécessaire dans les langages primitifs (Fortran II/IV, BASIC) comme instruction (Une instruction est une forme d'information communiquée qui est à la fois une commande et une explication pour décrire l'action, le comportement, la méthode ou la tâche qui devra commencer, se terminer, être...) de base permettant de réaliser des boucles et autres structures de contrôles.

Depuis la révolution de la programmation structurée (La programmation structurée peut être vue comme un sous-ensemble, ou une branche, de la programmation impérative, un des paradigmes majeurs de la programmation.) des années 1970, l’instruction goto n’est 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 (La programmation dans le domaine informatique est l'ensemble des activités qui permettent l'écriture des programmes informatiques. C'est une étape importante de la conception de logiciel (voire de matériel, cf. VHDL).) 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 (Break est un mot anglais faisant référence à la notion de rupture (to break peut signifier « casser » et « a break » peut signifier « une pause »). Le mot est...), que l’on trouve dans les langages dérivés du C, et des exceptions.

Langages

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

  • Assembleur
  • BASIC (En programmation, BASIC est un acronyme pour Beginner's All-purpose Symbolic Instruction Code. qui désigne une famille de langages de programmations de haut niveau.)
  • C
  • C++
  • C#
  • Cobol (COBOL est un langage de programmation de troisième génération créé en 1959 (officiellement le 18 Septembre 1959). Son nom est l'acronyme de...)
  • Fortran
  • Pascal
  • Perl
  • PHP (PHP (sigle de PHP: Hypertext Preprocessor), est un langage de scripts libre principalement utilisé pour produire des pages Web dynamiques via un serveur HTTP, mais pouvant également fonctionner comme...) 6 (goto limité)

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

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 (Le tout compris comme ensemble de ce qui existe est souvent interprété comme le monde ou l'univers.) naturellement l’instruction goto s’appelait allera.

Goto est un authentique patronyme japonais et Donald Knuth (Donald Ervin Knuth ([knu?θ], en chinois : ???[1]) (10 janvier 1938 à Milwaukee, Wisconsin - ) est un informaticien américain de renom et professeur émérite en informatique à l'Université...) plaisantait sur ce pauvre Monsieur Goto que tout le monde (Le mot monde peut désigner :) rejetait.

Il existe également un langage de programmation (Un langage de programmation est un langage informatique, permettant à un être humain d'écrire un code source qui sera analysé par une machine, généralement...) exotique parodique, le GOTO++, qui se déclare orienté GOTO.

Émulation

En 1966, le théorème (Un théorème est une proposition qui peut être mathématiquement démontrée, c'est-à-dire une assertion qui peut être établie comme vraie au travers d'un raisonnement logique construit à partir d'axiomes. Un...) 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 (En mathématiques et en logique, une variable est représentée par un symbole. Elle est utilisée pour marquer un rôle dans une formule, un prédicat ou un algorithme. En statistiques, une...) 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 (En théorie des ensembles, un ensemble désigne intuitivement une collection d’objets (les éléments de l'ensemble), « une multitude qui peut être comprise comme un tout », comme...) 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 implanter 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      
Page générée en 0.181 seconde(s) - site hébergé chez Amen
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
Ce site est édité par Techno-Science.net - A propos - Informations légales
Partenaire: HD-Numérique