Comme le titre de cette section le laisse supposer, nous allons d'abord nous intéresser à des boucles qui répètent un ensemble d'instructions tant qu'une certaine condition est vérifiée. Il y a deux boucles très semblables pour jouer ce rôle en Vala :
while
et
do...while
. Si vous connaissez un langage semblable au C qui dispose aussi de ces boucles, vous ne serez pas dépaysé.
Si vous êtes débutant, voici le principe : ces mots clefs sont suivies d'une condition et d'un bloc de code. Tant que la condition est évaluée comme vraie, le bloc de code est exécuté, c'est à dire que les lignes qui le composent sont exécutées les unes après les autres, et qu'à la fin de ce bloc on évalue à nouveau la condition. Si elle vaut encore vrai, on repart au début

. Cela donne à peu près ceci pour
while
(nous verrons l'autre dans un instant) :
Code : Vala | while (condition)
{
Instruction 1;
Instruction 2;
etc.
}
|
Les conditions de ces boucles ne sont pas différentes de celles que nous avons déjà rencontrées dans le chapitre sur les tests conditionnels. Ce sont des formules logiques comme les autres. Attention, donc, à ne pas écrire de conditions qui ne changeront jamais de valeur, car la boucle correspondante serait alors exécutée jusqu'à ce que vous interrompiez le programme (avec ctrl-c, le gestionnaire des tâches (ctrl-alt-suppr) sous Windows ou la commande kill sous un Unixoïde).
Nous allons donc appliquer ce que nous avons appris sur les chaînes pour par exemple lire l'âge de l'utilisateur en nous assurant qu'il écrit bien quelque chose de valable. Par "valable", nous voulons dire au dessus de 7 ans. Pour cela, nous utilisons deux variables : une de type
string
, qui sert à lire l'entrée, et une de type
int
, qui représente l'âge de l'utilisateur. Cela n'est autre que la chaîne précédente, convertie à l'aide de la méthode
to_int.
Quelle est la condition de la boucle ? Nous utilisons une boucle
tant que, donc nous voulons une condition qui ressemble à "tant que
age est strictement inférieur à 7". Hé bien, il nous suffit de l'écrire ainsi. Voici le programme :
Code : Vala 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | public class Main
{
public static int main (string[] args)
{
string entree = "";
int age = 0;
while (age < 7)
{
stdout.printf("Veuillez rentrer un âge valable s'il vous plaît : ");
entree = stdin.read_line();
age = entree.to_int();
}
return 0;
}
}
|
Notez que nous avons initialisé la variable
age à 0, afin de rentrer dans la boucle au moins une fois. En effet, si nous avions initialisé cette variable à 8, dès le début la condition de la boucle n'aurait pas été respectée, et rien n'aurait été exécuté.
Profitons-en pour présenter l'autre boucle conditionnelle,
do...while, qui exécute au moins une fois son bloc de code. Elle n'a pas vraiment la même forme que
while :
Code : Vala | do
{
stdout.printf("Veuillez rentrer un âge valable s'il vous plaît : ");
entree = stdin.read_line();
age = entree.to_int();
} while (age < 7);
|
En réalité, la différence entre les deux boucles est que
while
teste la condition au début d'un tour de boucle, alors que
do...while la teste à la fin. Ceci explique qu'elle soit exécutée au moins une fois ! Attention au point virgule final dans le cas de
do...while.