CodeS-SourceS
Rechercher un code, un tuto, une réponse

[mirc scripting] les boucles avec /while et /goto

Août 2017

Etant donné que beaucoup de personnes ne savent pas ou ne savent pas correctement manipuler les boucles, je vais essayer d'expliquer ça en un petit tuto.

Tout d'abord, il est préférable de faire une boucle avec while qu'avec goto. While est plus rapide, cela ne se voit pas dans les petites boucles, mais dans les plus grosses.
Nous verrons un exemple dans chacun de ces 2 cas.
Commençons par while :


alias testwhile {
;on définit dans des variables internes les paramètres de la boucle
;pourquoi utiliser var au lieu de set ? car avec var , les variables crées seront crées et effacées automatiquement
;à la fin du script, tandis que si on aurait utilisé set, elles auraient encore résidées, et il aurait fallut utiliser
;unset pour les effacer
var %bla 0, %blabla 30
;on aurait pu très bien aussi faire var %bla 0 | var %blabla 30 , mais autant faire le plus court possible
; le signe "=" est également optionnel, ca c'est kolibot qui me l'a appris :p
while (%blabla > %bla) { inc %bla | echo -a boucle numéro %bla }
;cela signifie : tant que %blabla ( qui vaut 30 ) est supérieur à %bla ( qui vaut 0 au départ ), on incrémente
;la variable %bla de 1 , et on affiche sa valeur en /echo . A chaque boucle, la variable est incrémenté
;jusqu'à se qu'elle ateigne 30, c'est à dire dès que %blabla sera égal à %bla, alors la condition de la boucle
;ne sera plus vraie et la boucle s'arretera.
}

/!\ : N'oubliez jamais d'incrémenter votre variable, sinon cela tournera en boucle infini, et votre mIRC va géler.

Bon, passons à un exemple utilisant goto :


alias testgoto {
;meme principe de variables que dans le précédent exemple
;je précise que vous pouvez les nommer comme vous voulez, tant qu'elles n'ont pas le meme nom lol
var %bla 0, %blabla 30
;alors ceci, permet de rappeler le goto, j'expliquerai + cela en détails plus loin.
:retourgoto
;ici, on vérifie la condition avec un if, et non avec un while. Il ne faut surtout pas mélanger ces 2 méthodes de boucle.
if (%blabla > %bla) { inc %bla | echo -a boucle numéro %bla | goto retourgoto }
;en clair sa donne : Si %blabla est supérieur à %bla, on incrémente %bla de 1, et on affiche sa valeur en echo.
;la commande goto permet de rappeler le goto
;dans notre condition, cela permet, si la condition est vraie, de rappeler le script là où nous avons placé
;notre :retourgoto , pour qu'il revérifie à la boucle à chaque fois que ce goto est appelé.
}

Vous pouvez appeler votre goto comme vous le voulez, cela n'a pas d'importance.
Par contre, vous ne pouvez pas appeler ( avec /goto ) un goto qui n'existe pas.
Exemple : vous faites un /goto youpi , mais vous n'avez pas placé de :youpi dans votre script.

Les gotos ne sont pas utilisés uniquement dans les boucles, mais aussi dans un simple script, pour aller à un endroit précis, et sauter des conditions par exemple.
Goto signifie en quelque sorte "aller à".
( Je vais pas m'éterniser sur l'utilisation de goto en dehors des boucles, car cela n'est pas le but de mon tuto :/ )


Ne sous estimez pas les boucles, elles sont utilisées PRATIQUEMENT PARTOUT.
( pour lire un fichier avec $read , pour sortir des pseudos de la nicklist, etc etc )

Pour finir, je vous donne un petit exemple d'utilisation de boucle avec while pour lire un fichier :

alias readfichier {
;$lines permet de connaitre le nombre de lignes d'un fichier
var %bla 0, %blabla $lines($1)
while (%blabla > %bla) { inc %bla 1 | echo -a $read($1,%bla) }
;on fait une boucle celon le nombre de lignes du fichier lus, et on affiche chaque ligne en echo.
;c'est en quelque sorte comme si vous faisiez pleins de /echo -a $read(fichier.txt,1) , /echo -a $read(fichier.txt,2) à la main.
;Sauf que là, la valeur de la ligne est mise automatiquement grâce à la boucle.
}

C'est bien sûr un exemple parmis d'autre, après, à vous d'exploiter vos connaissances pour arriver à vos fins :D
Je vous ai présenté chaque exemple dans un alias, pour que vous puissez les tester plus facilement, mais rien ne vous empeche de faire des boucles directement
sans passer par un alias. ( comme par exemple, dans un événement )


( PS : pour ceux qui n'ont pas réussi à utiliser les exemples, je rappelle qu'ils sont à placer dans les REMOTES, ALT + R , et non dans les alias)

Adresse d'origine

A voir également

Publié par cs_SornDrixer.
Ce document intitulé «  [mirc scripting] les boucles avec /while et /goto  » issu de CodeS-SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
[mirc scripting] comment faire un dialog ?
[mirc scripting] gestion des erreurs particulière (à partir de mirc 6.14)