GENISTA (1971) : TUTORIEL "BBC BASIC FOR WINDOWS" EN FRANÇAIS : APPENDICE A : NUMÉROS DE LIGNES ET "GOTO" REDOUTÉS



Logo Genista, fondé en 1971

Guide Tutoriel de BBC BASIC for Windows, App. A

BBC BASIC (BB4W) Tutorial: Line Numbers & the Dreaded GOTO

Les numéros de lignes et les GOTO (Tutoriel BBC BASIC, App. A) [Genista]

Par Peter Nairn  •  Traduction : Guy Schaffner (Texte et images) (Genista)

informatique et programmation Vous utilisez ce « Guide pratique » de Peter Nairn pour apprendre à programmer
en « BBC BASIC for Windows ».
Vous avez appris, ou vous voulez apprendre à programmer de façon moderne et rationnelle :
pour cela, vous utiliserez le moins possible (ou pas du tout)
les lignes numérotées et les renvois GOTO.
Chapitre 21   •   Appendice A   •   Appendice B      

Appendice A — Numéros de lignes et GOTO redoutés

La plupart des programmeurs chevronnés lèvent les mains au ciel en entendant parler de numéros de lignes et de GOTO. On considère qu'il ne s'agit pas d'une conversation correcte et on prie les dames de sortir avant que ne commence la discussion. Il existe un nombre égal de programmeurs qui jurent par eux plutôt que contre eux, en insistant pour dire qu'ils sont valides si on les utilise correctement. La vérité est probablement quelque part entre les deux. Ne m'envoyez pas un e-mail sur ce sujet, parce que c'est un point sur lequel de nombreux kilo-octets ont été échangés sans convaincre personne à changer de côté. À un moment ou à un autre, vous les rencontrerez dans les programmes des autres, aussi serait-ce une négligence de ne pas les mentionner.


Les numéros de lignes


Dans les BASIC traditionnels – et celui-ci en est un (et il faut en être fier) – les lignes ont toujours été numérotées. Bien que leur usage soit un peu tombé en désuétude, dans « BB4W » ces numéros sont toujours utiles. Si vous faites une erreur sur une ligne, lorsque le programme est exécuté, le BASIC vous fournira un message d'erreur précisant la ligne sur laquelle il a trouvé l'erreur. BASIC permet des numéros de lignes de 0 à 65535. Il est habituel de commencer à 10 et de continuer avec des incréments de 10.

Les lignes doivent être placées dans l'ordre des numéros, et les doublons ayant le même numéro ne sont pas autorisés. S'il vous faut insérer une nouvelle ligne, assurez-vous que son numéro soit placé entre celui de la ligne qui précède et celui de la ligne qui suit, sinon « BB4W » ne sera pas content. S'il vous faut insérer de nombreuses lignes, « BB4W » vous permet d'entrer des lignes sans numéro et il les renumérotera après coup si vous le lui demandez gentiment. Pour démontrer ceci, entrez le morceau de code révolutionnaire suivant :


      REM Numéros de lignes - démonstration
      PRINT "Bonjour, vous tous"
      WAIT 100
      PRINT "C'est fini !"
      END
    

Maintenant, dans la barre d'outils (Utilities), sélectionnez Renumber. Une boîte de dialogue apparaît : acceptez-y les réglages par défaut qui commencent au numéro 10 et continuent de dix en dix ; cliquez sur OK. Le listing est mis à jour. Pour un programme plus gros, c'est beaucoup plus facile de faire ainsi que de renuméroter à la main. Lancez le programme pour prouver qu'il fonctionne. Il est également possible d'ôter les numéros de lignes. Pour ce faire, appelez à nouveau la boîte de renumérotation et cochez « Remove unused line numbers » (Ôter les numéros de lignes inutilisés). Le mot « unused » (inutilisé) sera précisé dans la partie suivante qui concerne GOTO, mais il est possible de faire tourner un programme à l'intérieur de lui-même au cours de l'exécution. La cible de ces sauts peut être un numéro de ligne, aussi si une ligne saute vers un numéro de ligne, ce numéro est classé comme « utilisé » et il ne sera pas ôté.



GOTO


GOTO est une commande utilisée en conjonction avec un numéro de ligne. Lorsque le programme est exécuté, une instruction GOTO cause un saut immédiat vers la ligne spécifiée et l'exécution continue à partir de cet endroit. Par exemple, dans notre programme de cercle déjà bien utilisé, nous pouvons le faire tourner en boucle sans fin en insérant la ligne 50.


      10 REM Aire d'un cercle
      20 INPUT "Entrez le rayon " Rayon
      30 Aire=PI*Rayon^2
      40 PRINT "L'aire du cercle est " ;Aire
      50 GOTO 20
      60 END
    

GOTO peut être utilisé comme façon rapide et très ordinaire de sauter un bloc de code au cours de la mise au point :


      400 REM Autre chose
      410 GOTO 500
      420 REM Écrans d'aide déjà testés
      430 REM ...
      440 REM ...
      450 REM ...
      460 REM ...
      470 REM ...
      480 REM ...
      490 REM ...
      500 REM Début des choses intéressantes
    

Les GOTO peuvent être rendus conditionnels :


      10 REM Aire d'un cercle
      20 INPUT "Entrez le rayon " Rayon
      30 Aire=PI*Rayon^2
      40 PRINT "L'aire du cercle est " ;Aire
      50 INPUT "On recommence (O/N)"; Repon$
      60 IF Repon$="O" OR Repon$="o" THEN GOTO 20
      70 END
    

Et dans les IF sur une seule ligne (ne sautez jamais, au grand jamais, hors d'un bloc ou à l'intérieur d'un bloc de plusieurs lignes à l'aide de GOTO), vous pouvez laisser soit le THEN, soit le GOTO complètement de côté :


      50 IF ResultatTest>50 THEN 1000
    

ou :


      50 IF ResultatTest>50 GOTO 1000
    

mais jamais :


      50 IF ResultatTest>50 1000
    

En s'accordant beaucoup trop d'indulgence, on risque d'en arriver à ce qu'on appelle couramment le « code spaghetti » ; c'est pourquoi il est généralement autant détesté. Ne vous donnez pas la peine de taper ce qui suit, mais vérifiez si vous êtes capable de suivre :


      10 GOTO 60
      20 PRINT "Au secours !"
      30 PRINT " les lignes 20 et 50 ";
      40 GOTO 80
      50 PRINT "Je suis empêtré !"
      60 PRINT "Pourquoi donc";
      70 GOTO 30
      80 PRINT "ne sont-elles jamais exécutées ?"
      90 END
    



Un truc : Toutes les lignes n'ont pas besoin de numéro PRINT

On n'est pas obligé d'avoir un numéro de ligne sur chaque ligne ; seules celles qui sont la cible d'un GOTOGOTO ou d'une instruction similaire en ont besoin. Ce qui suit est parfaitement légal :


 
             REM Aire d'un cercle
          20 INPUT "Entrez le rayon " Rayon
             Aire=PI*Rayon^2
             PRINT "L'aire du cercle est " ;Aire
             GOTO 20
             END
        

Cette technique peut être utilisée lors de la conversion de programmes anciens jusqu'à ce que vous ayez mis la structure au point et que vous puissiez éliminer complètement les GOTO. Si vous choisissiez « Remove unused line numbers » (Ôter les numéros de lignes non utilisés) dans le dialogue de renumérotation, le résultat serait celui que vous avez vu.



Les programmeurs des très très anciens programmes de BASIC (on parle ici de la fin des années soixante ou du début des années soixante-dix) devaient utiliser GOTO parce qu'ils n'avaient pas le choix. « BB4W » a de nombreuses options pour vous aider dans l'exécution conditionnelle et la répétition de blocs de code. Dans la plupart des cas, on n'en a plus besoin, mais, comme on l'a dit plus haut, vous rencontrerez du code qui en contient. Si vous devez absolument vous servir de GOTO :

a)
Faites des sauts qui soient courts, de préférence sur une seule page afin que la destination soit visible.

b)
N'entrez pas et ne sortez pas de blocs de code comme les PROC, les boucles ou les IF (on ne le dira jamais assez), parce qu'en faisant ainsi vous multipliez les erreurs dans les piles logiques de « BB4W ».

c)
Ne le dites jamais en public : vous risqueriez de causer une émeute.



Fin de l'Appendice A





Haut de Page  •  [Top of Page]

Page suivante (Ap. B)  •  [Next Page (Ap. B)]

Page précédente (Ch. 21)  •  [Previous Page (Ch. 21)]

Page d'entrée : BASIC, BBC BASIC et BB4W  •  [BASIC, BBC BASIC and BB4W  Entry Page]

Début du Guide pratique du BBC BASIC  •  [The Beginning of the BBC BASIC Tutorial]

Autres sujets  •  [Other subjects]