Syntaxe
Exécute le sous-programme qui commence à une étiquette, jusqu'à son RETURN, puis reprend après le GOSUB.
GOSUB <label>
<label>:
<statements>
RETURNS’écrit aussi : RETURN
Les éléments
| <label> | Le nom du sous-programme, écrit <label>: seul sur sa ligne. La casse est sans importance. |
|---|---|
| <statements> | Le corps du sous-programme. |
À savoir
- Un sous-programme partage toutes les variables du programme. Il n'a ni paramètres ni variables locales : écrivez une FUNCTION quand il en faut.
- Un sous-programme a un seul RETURN, à la fin. Un RETURN anticipé dans un IF casse le programme : sur une ligne, il s'arrête sur une erreur ; dans un IF en bloc, le compilateur coupe le sous-programme à cet endroit et le reste du programme disparaît sans message. Mettez plutôt la suite du sous-programme dans le IF.
- Le programme principal n'entre jamais par accident dans un sous-programme : un
ENDoublié avant les étiquettes ne fait pas de dégât. Une étiquette sans RETURN continue dans l'étiquette suivante, dont le RETURN ramène au GOSUB. - Un
GOSUBvers une étiquette absente est une erreur de compilation : "Unknown BASIC label". Une étiquette qui termine une chaîne sans RETURN aussi : "BASIC label … requires RETURN". - Un sous-programme qui appelle Sync(), Wait() ou
YieldTask()attend des images. C'est permis dans un programme avec une boucle DO, dans un programme avec unENDseul sur sa ligne, ou depuis un autre sous-programme qui attend. ON … GOSUBn'est pas pris en charge : utilisez SELECT avec un GOSUB par CASE.ENDdans un sous-programme arrête tout le programme. Dans une FUNCTION,RETURNquitte la fonction.
Exemple
score = 10GOSUB AddBonusGOSUB AddBonusConsole(Str(score)) ' 30ENDAddBonus: score = score + 10RETURNDans le manuel : Contrôle du flux