Les boucles en concret

From Base de connaissances eggdrops & TCL
Jump to: navigation, search

En Tcl, il y a 3 façons de faire une boucle. Celles-ci sont l'utilisations des "commandes" :

  1. While
  2. For
  3. Foreach

Ainsi que deux commandes que nous verrons aussi :

  1. continue
  2. break

Je vous conseille donc avant de poursuivre d'avoir lu la doc de chacune de ses commandes.

-> While

Pour faire simple, ont pourrait, on pourrait appeller "while" l'opérateur "tant que".

En effet, en gros, nous allons effectuer des opérations "tant que" certaines conditions son valider.

Voyez en concret :

bind pub - !test pub:test
proc pub:test {nick host hand chan arg} {
   set i 0
   while {$i < 10} {
      puthelp "PRIVMSG $chan :Dans cette boucle, i vaut $i"
      incr i
   }
}

Concrètement, quand vous taperez !test sur un salon ou se trouvera votre eggdrop, la boucle se lancera et vous devriez voir apparaitre sur votre chan :

 00:00:00 <Robot> Dans cette boucle, i vaut 0
 00:00:00 <Robot> Dans cette boucle, i vaut 1
 00:00:00 <Robot> Dans cette boucle, i vaut 2
 00:00:00 <Robot> Dans cette boucle, i vaut 3
 00:00:00 <Robot> Dans cette boucle, i vaut 4
 00:00:00 <Robot> Dans cette boucle, i vaut 5
 00:00:00 <Robot> Dans cette boucle, i vaut 6
 00:00:00 <Robot> Dans cette boucle, i vaut 7
 00:00:00 <Robot> Dans cette boucle, i vaut 8
 00:00:00 <Robot> Dans cette boucle, i vaut 9
 00:00:00 <Robot> Dans cette boucle, i vaut 10

-> For

Avec la boucle For, c'est simple, il n'est pas question la de "tant que" ou autre délire du genre.

For est une boucle définie sur deux nombres qui définiront le nombre de fois que l'on va faire quelque chose :

bind pub - !test pub:test
proc pub:test {nick host hand chan arg} {
   for {set x 0} {$x<10} {incr x} {
      puthelp "PRIVMSG $chan :Dans cette boucle, i vaut $i"
   }
}

Cette source nous donnera exactement le même résultat que ce que l'on a obtenue avec la boucle while.

Donc quelque chose qu'on constate souvent, remarquez qu'il y a souvent plusieurs façon de faire ce que l'on veut, et n'oubliez surtout pas que les solutions les plus simples sont toujours les meilleures.

-> Foreach

Sans doute la plus utilisée (de boucle), foreach va nous permettre de manipuler des listes.

Je vais plus simplement m'appuyer d'un exemple pour vous montrez l'utilisatée(ation) de cette boucle :

set admin [list "DaV34" "CrazyCat"]
bind pub - !administrateurs pub:administrateurs 
proc pub:administrateurs {nick host hand chan arg} {
   global admin
   foreach a $admin {
      puthelp "PRIVMSG $chan :$a est un administrateur"
   }
}

Une fois que vous avez taper !administrateurs sur un salon ou se trouve l'eggdrop, voila ce qu'il vous retourne :

 DaV34 est un administrateur
 CrazyCat est un administrateur

En espérant que vous ayez comprit, car cela est relativement simple.

-> Continue et Break

L'opérateur break permet d'arrêter une boucle, de la stopper. Nous faisons cela souvent quand ont cherche a récupérer une information par le biais de la boucle et donc une fois l'information récupérer, inutile de faire en sorte qu'elle continue.

L'opérateur continue quand a lui est rarement utiliser, dans le sens ou il permet a une boucle de continuer a se relancer, mais la boucle le faisant automatiquement ... cet opérateur n'est pas tellement indispensable.

Des exemples appliqués seront ajouté par la suite, afin que vous compreniez mieux comment fonctionne ces deux opérateurs.

-> Syntaxe des boucles

Je vous ai fait connaitre les boucles via des exemples appliqués, mais voyons ici pour ceux que sa intéresse la théorie (ou plustot la syntaxe) de chaque boucle :

While

while test corps

For

for start test next body

Foreach

foreach varname list body
foreach varlist1 list1 ?varlist2 list2 ...? body

Je ne saurais mieux faire si vous ne comprenez pas les "syntaxes" que de vous dires de vous reportez a la documentation de chacune d'entre elle (présent sur ce wiki même) ou encore de remonter la page ou pour chaque boucle, il y a un exemple appliqué.