Ruby/Boucles
Les boucles sont utilisées dans l'objectif de répéter une instruction donnée un certain nombre de fois. Là aussi, il existe plusieurs manières d'accomplir la même chose.
La boucle while
modifier
La boucle while
équivaut à un if
qui se répète tant qu'une certaine condition est considérée comme true
.
La condition que vous placez entre les parenthèses (facultatives) est de même type que celles des conditions if
, unless
, etc.
Ici, la condition est toujours vraie : la boucle se répétera alors à l'infini. Donc, dans une boucle, on modifie la valeur d'une donnée prise en compte dans la condition, qui est ici un nombre, mais qui pourrait aussi bien être une valeur booléenne, ou autre :
estConnecte = true
while(estConnecte)
puts "vous etes connecte"
estConnecte = false
end
puts "vous avez ete deconnecte"
La valeur de estConnecte
est mise à false
dès le premier tour de boucle ; ainsi la condition du while
n'est plus vérifiée et la boucle n'est plus parcourue.
On peut régler l'exécution d'une boucle while
en utilisant un compteur et ainsi exécuter une instruction un certain nombre de fois. Voici comment procéder :
La valeur de compteur
augmente de 1 à chaque tour de boucle : lorsqu'elle atteint 5, la boucle n'est plus parcourue.
Il est possible de réécrire cette boucle en mettant la condition à la fin :
Cette boucle, délimitée par begin
et end while
, est toujours exécutée au moins une fois, la condition n'est évaluée qu'après le premier tour de boucle.
La boucle loop
modifier
La boucle loop
est infinie, et ne teste donc pas de condition, elle équivaut à une boucle while(true)
.
Étant donné qu'elle est infinie, il vous faudra utiliser l'instruction break
pour en sortir.
La boucle est parcourue jusqu'à ce que n soit supérieur à 6.
La boucle until
modifier
La boucle until
est à la boucle while
ce que unless
est à if
. Cette boucle s'exécute jusqu'à ce qu'une condition soit vraie. Elle est donc totalement équivalente à while!(condition)
.
La boucle est parcourue jusqu'à ce que n soit supérieur à 5.
Tout comme la boucle while
, on peut réécrire cette boucle de cette manière :
Les instructions placées entre begin
et end until
seront exécutées au moins une fois car la condition n'est évaluée qu'après le premier tour de boucle.
La boucle for
modifier
Par exemple pour obtenir la liste de tous les nombres de l’ensemble [O; 7]
. Il nous faut écrire :
print n
est exécutée pour chaque élément de [0; 7]
, n prend successivement les valeurs de cet ensemble.
Une boucle for
se termine par un end
. Le mot-clé do
peut être placé après l’ensemble à parcourir, il est facultatif si les instructions à exécuter sont précédées d'un retour à la ligne.
La notation t..n
désigne les éléments compris dans l'intervalle délimité par t et n, où t et n sont des nombres et considérés comme étant inclus dans cet intervalle.
La notation t...n
désigne le même ensemble, à la différence que la seconde borne de l’ensemble est exclue.
Ceci est notamment utile pour les chaînes de caractères : si on considère : s = "chaine"
, alors puts s[0..3]
affichera chai
, on remarque alors que la chaîne de caractère est considérée comme un tableau (la première lettre porte l'indice 0).
On peut donc tout aussi bien utiliser la boucle for
pour parcourir un tableau :
Il est tout à fait possible de mettre en association plusieurs conditions et plusieurs boucles : les enchaîner, les emboîter, etc., du moment que vous les refermez toutes avec end
.