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
|