Maintenant que vous êtes familiers avec les conditions dans Ruby, il est temps de voir un autre type de boucle: la boucle while («tant que»).
Cette boucle est un peu plus intéressante que celle que vous venez de voir. Elle se base sur une condition:
while condition
...
end
Ou condition n'est rien d'autre qu'une expression conditionnelle, comme celles que nous venons d'appréhender précédemment.
Voici un exemple tout simple, illustrant l'utilisation d'une boucle while:
Analysons le programme:
Initialisation de compteur à 0.
Comme compteur est bien inférieur à 10, nous rentrons dans la boucle.
Dans la boucle, nous affichons un message, et nous incrémentons compteur de 1. Maintenant, compteur vaut 1.
Comme compteur est toujours inférieur à 10, nous sautons à nouveau dans la boucle.
...
Le scénario se répétera jusqu'à ce que compteur soit égal à 10. Voici la sortie du programme:
En d'autres mots, une boucle while répétera la boucle tant que la condition sera évaluée comme étant vraie.
Certaines choses sont faciles à réaliser avec une boucle while, mais moins évidentes avec n.times.
Supposez que nous voulons calculer la plus grande puissance de 2 plus petite que 10000. C'est très facile à programmer avec une boucle while:
Voici ce que ça donne:
Imaginez combien ça aurait été difficile d'arriver au même résultat, en utilisant n.times.
Re-implémentez le dernier programme, pour qu'il demande à l'utilisateur une valeur maximale (à la place de 10000). Le programme devra se comporter de cette façon:
Démarrez le même programme, en y entrant 1e10 comme entrée. Que se passe-t'il?
Si vous avez utilisé la méthode String#to_i, il y a des chances pour que 1e10 soit converti par le nombre 1. Essayons de comprendre pourquoi dans IRB:
Comme vous pouvez le remarquer, 1e10 est en Float (nombre flottant). Donc, vous devez utiliser la méthode String#to_s.