Suivez-nous sur X
|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : AmigaBasic - Procédures et paramètres
(Article écrit par un auteur inconnu et extrait d'Amiga News Tech - mars 1990)
|
|
Oui, je sais : ce n'est pas la peine de crier comme ça ! Je sais que cela fait déjà quatre
mois que vous avez été privés de la partie préférée de votre mensuel favori, j'ai nommé
bien sûr l'initiation à l'AmigaBasic. Qu'est-ce qu'on y peut ? Michel Descoins est parti
on ne sait où, à la recherche de l'Amiga idéal (non, là je plaisante, car il est sous mes
doigts cet amiga-là !).
Trêve de plaisanterie. Le dernier article paru vous promettait de travailler avec les paramètres.
Cela va être fait mais avant de parler paramètres, il faut causer procédure. Alors, qu'est-ce
qu'une procédure ? Eh bien, c'est tout simplement un programme tout à fait indépendant du
programme principal et qui peut être appelé par son nom. Mais non, ne jetez pas votre revue,
voici un exemple : imaginons une procédure qui remplisse l'écran de petites étoiles :
SUB RemplirEcran STATIC
WIDTH 80
FOR I=1 to 2000
PRINT "*";
NEXT I
PRINT
END SUB
|
Si cette procédure est présente dans le programme, il vous suffit de taper "remplir écran"
pour que l'écran se remplisse d'étoiles. Vous pouvez même directement le taper dans la fenêtre
de commande : le BASIC considérera votre procédure comme une de ses instructions.
Psst, ah oui ! l'instruction WIDTH : c'est une instruction d'intérêt secondaire, qui dit
à l'ordinateur combien il peut afficher de caractères sur une ligne.
Et les paramètres là-dedans ?
Vous en connaissez beaucoup, vous, des commandes BASIC qui ne demandent aucun paramètre ?
- Print "bonjour", il y a un paramètre, c'est "bonjour".
- CLS (nettoyer l'écran) : ici, il n'y a pas de paramètre.
- IMPUT a,b$,c,d% : je compense, ici, il y a quatre paramètres !
Bon, alors, hein ! Qu'est-ce que je vous disais ? Il y a seulement une différence de
taille entre les paramètres des instructions BASIC et ceux de vos futures procédures
(car si vous êtes déjà capables d'en faire, je ne vois pas l'intérêt que vous avez à lire
ces lignes), cette différence, c'est la souplesse des instructions BASIC. Tiens,
l'instruction PRINT par exemple, on peut lui coller autant de paramètres que l'on désire
et, de plus, n'importe quel type ! C'est-y pas merveilleux, ça ? Nos pauvres procédures,
c'est tout le contraire : pour elles, la rigueur est de rigueur. Non seulement on
devra les appeler (on dit bien : "appeler une procédure") avec le nombre voulu de paramètres,
ni plus, ni moins et en outre, ces paramètres devront être du même type dans la déclaration
de la procédure que dans son appel.
Mais non, ce n'est pas très difficile, tout ça ! Et d'ailleurs voici un exemple.
Reprenons notre procédure de remplissage d'écran, mais cette fois-ci, en transmettant comme
paramètre le nombre de caractères à placer et le caractère qui servira pour le remplissage,
la déclaration de la procédure sera la suivante :
SUB RemplirEcran(Ncar%,Caractèr$) STATIC
|
Mais il n'y aura pas trente-six manières de l'appeler. Surtout, n'essayez pas (ou bien si,
essayez, ce n'est pas ça qui va griller les puces de votre machine favorite) :
RemplirEcran "*",2000
RemplirEcran 2000,"*",&
RemplirEcran 2000,0,"*"
RemplirEcran 2000,0
|
Dans le premier cas, vous inversez les paramètres. Dans le deuxième, vous en mettez un de
plus (et donc un de trop). Dans le troisième, 2000 est un réel et non un entier court comme
il aurait fallu et dans le dernier cas, le "0" n'est pas le caractère "0" (souvenez-vous
de ce qui a été dit dans l'article de
juillet 1989). L'appel de procédure correct est : RemplirEcran 2000"*".
Statique ou dynamique ? Non, statique obligatoirement (il n'existe pas en BASIC de procédures
dynamiques comme en PASCAL). D'ailleurs, les plus malins d'entre vous auront déjà essayé
de supprimer le STATIC à la fin des déclarations de procédure et ils se seront plantés.
Quoi qu'il en soit, la syntaxe correcte pour un appel de procédure est la suivante :
SUB Nom de procédure (Paramètres séparés par des virgules)
STATIC
SHARED Noms de variables séparés par des virgules
Développement de la procédure
END SUB
|
Aïe, aïe, aïe, encore une instruction de plus ! Que vient faire ce "SHARED"
dans ma belle procédure ? C'est une très bonne question et je me remercie de me l'être posée,
mais à part ça, la réponse euh... Alors accrochez-vous !
Paramètres formels, actuels et tutti quanti
Regardez un peu plus haut notre procédure "RemplirEcran" : les paramètres qui y sont déclarés
sont des paramètres formels, c'est-à-dire que leur nom est purement formel car il n'est utilisé
qu'à l'intérieur de la procédure. Lors de l'appel de la procédure, les paramètres cités sont dits
actuels (parce qu'en anglais, "actual" veut dire réel) et ce sont leurs valeurs qui seront
réellement utilisées dans la procédure.
Exemple :
Vous appelez la procédure de cette manière : RemplirEcran i%,a$. Les paramètres "i%"
et "a$" seront ceux qui seront utilisés dans la procédure, même si lorsqu'on a écrit celle-ci,
on a utilisé les variables "Ncar%" et "caractères". Autrement dit, si avant d'appeler ma
procédure, je déclare "Ncar%" comme étant égal à 100 mais que je déclare "i%" à 2000, dans
la procédure, "Ncar%" sera égal à 2000. Essayez, vous verrez bien. Le problème, c'est que
quelquefois (et même très souvent), il y a des paramètres qui doivent revenir de la procédure
au programme. Ce sont alors des paramètres partagés (shared), dont le nom est identique dans
le programme principal et dans la procédure.
Bon, maintenant, comme un petit dessin vaut mieux qu'un grand discours, voici un petit programme
qui vous aidera à remettre vos idées en place.
Le mois prochain, il y aura encore quelques points à éclaircir sur le BASIC en général, mais
dans deux mois, nous pourrons passer aux commandes qui manipulent toutes les capacités de
l'Amiga.
|