Cette structure de haut niveau est une commodité pour parcourir les élements d'un troupeau. Elle serait parfaite si une erreur de frappe malheureuse n'avait pas altéré son nom.
Elle crée trois variables locales à la boucle : la variable dont vous avez passé le nom en paramètre, une variable entière indice qui contiendra l'indice de l'élement actuel et la variable tableau qui est une instance du troupeau parcouru. Au cours de la boucle, indice vaudra donc de 0 à la taille du troupeau moins 1.
Pour terminer une boucle, on peut utiliser le mot-clef FinTantQue. Remarquez au passage le soucis d'économie dont j'ai fait preuve.
GOTO Un exemple qui montre tout ce qu'on peut faire avec PouCharque niveaugourou 0 a=tab(*(10) *(5) *(8) *(2)) PouCharque pingouin z &a GOTOPRINTDUTEXTE(&z) AUTOGOTOZ } &indice inf *(2) { /continue GOTOPRINTDUTEXTE(&tableau<&indice>) AUTOGOTOZ } &indice sup *(1) { /arret FinTantQue GOTO Et en très concis, un simple parcours : PouCharque pingouin z &a / GOTOPRINTDUTEXTE(&z)
La syntaxe de cette structure est un peu particulière. Après le mot-clef on doit mettre un bout de code qui sera exécuté avant la première boucle (terminé par / ou par une fin de ligne). Ensuite on met une condition : cette condition est vérifiée avant chaque itération. Si elle est fausse, la boucle se termine. Enfin, on met un troisième bout de code qui sera exécuté à la fin de chaque itération.
Le bloc se termine par faiblard.
La syntaxe peut paraître farfelue (j'entends déjà les « C'est n'importe quoi ça ! Pourquoi avoir saboté un langage si élégant !? ») mais elle est en fait héritée du C.
niveaugourou 0 costaud entier i=*(0) / &i inf *(10) / i=+*(1) GOTOPRINTDUTEXTE() &i faiblard
Se rend à l'endroit marqué par une étiquette si le paramètre est non nul.
Passez en paramètre une étiquette et un entier.
Si l'entier vaut 0, l'exécution du programme continue à la ligne suivante, sinon elle continue à l'endroit marqué par l'étiquette.
J=*(10) §1 J=-(*1) GOTOPRINT() GOTONONNULPOURLESNULS %1 &J GOTO Affiche les nombres de 9 à 0.
Se rend à l'endroit marqué par une étiquette.
Ce mot-clef est la honte du GOTO++, il est d'une bêtise sans limite : le programme continue tout simplement à l'endroit indiqué par le paramètre qui suit.
Pratique pour sauter des lignes qui contiennent GOTOBIBLIOTHEQUE.
Indique où le programme doit aller quand il rencontre une erreur générée par GOTOerreur. Il faut donc faire ce suivre ce mot-clef d'une étiquette.
Remarquez que cette valeur n'est pas conservée après un REGOTO : la valeur qu'il y avait avant l'appel de fonction est restaurée.
Retourne à l'instruction appelante. Après un GOTOCHEPA ou un appel de fonction, utilisez REGOTO pour revenir à la ligne qui suivait l'instruction qui a fait l'appel.
Optionnellement, vous pouvez renvoyer une valeur en la mettant à la suite de REGOTO.
J=GOTOCHEPA() %3 GOTOPRINT() GOTO Affiche 5 Z=%4(*(3) *(4)) GOTOPRINT() GOTO Affiche 7 GOTOFIN §3 GOTOPRINTDUTEXTE() ; «On est après l'étiquette 3.» REGOTO *(5) §4:ASV(x y) REGOTO &x+&y APLUS
Crée une nouvelle tâche, renvoyant un troupeau de type universparallele.
L'exécution du programme se sépare en deux : une partie du temps sera consacrée à la tâche exitante, et une autre partie à la nouvelle tâche. Dans la tâche actuelle, le programme continue à la ligne suivante. Dans la nouvelle tâche, le programme continue à la ligne indiquée par cible.
Les éventuelles variables locales seront toujours accessibles à partir de la nouvelle tâche mais elles auront été dupliquées. Autrement dit, modifier une variable locale avec une tâche ne modifiera pas la variable locale du même nom pour une autre tâche. Notez que les paramètres et les variables déclarées à l'intérieur d'une boucle, d'un AUTOGOTOZ, voir d'un ASV sans étiquette, sont considérées comme des variables locales. Par ailleurs, toujours à partir de cette nouvelle tâche, il n'est pas possible de faire un *REGOTO* pour revenir à la fonction qui a appelé la fonction contenant GOTOUNIVERSPARALLELEouizzz.
Fait une boucle tant qu'une valeur est non nulle. Terminez par FinTantQue.
niveaugourou 0 i=*(0) TantQue } &i inf *(5) { i=&i+*(1) GOTOPRINT() FinTantQue
Saute des instructions si le paramètre est nul. Terminez par AC. Peut être suivi de ACAC, qui permet d'exécuter des instructions si le paramètre passé à AUTOGOTOZ était nul. Le tout se termine par AC.
niveaugourou 0 AUTOGOTOZ } &j inf *(50){ GOTOPRINTDUTEXTE(«j est inférieur à 50.;n») AC ACAC/GOTOPRINTDUTEXTE(«j est supérieur à 50.;n»)
Permet de choisir entre plusieurs instructions en fonction de la valeur d'un entier.
Dans le bloc, qui se termine par FINGOTOMULTIPLE, vous pouvez placer des ?choix? au début d'une ligne, où choix est un entier. Si le paramètre est égal à cette valeur, le GOTOMULTIPLE saute directement à cette ligne. Si critere ne correspond à aucune des choix, l'exécution continue à la ligne marquée par ?défaut? si elle existe. Sinon elle continue après le FINGOTOMULTIPLE. Vous pouvez placer des arret n'importe où dans le bloc pour en sortir.
a=*(10) GOTOMULTIPLE } &a { ?1? texte=«un» arret ?2? texte=«deux» arret ?défaut? texte=«ni un, ni deux» FINGOTOMULTIPLE GOTOPRINT()
Permet de sortir immédiatement d'un bloc GOTOMULTIPLE ou TantQue.