# Introduction au Lua/Boucles

Après avoir abordé la structure particulière des modules Scribunto pour Mediawiki, nous avons ensuite étudié quelques caractéristiques du langage Lua, les variables, les expressions et les conditions. Une boucle est une structure de code utilisée pour répéter des instructions au sein du script. Cette leçon montre comment utiliser des boucles dans vos scripts.

## Prérequis

Cette leçon suppose que vous ayez assimilé la leçon Conditions.

## Créer un script Lua avec boucles

* Accéder au Module:Sandbox.
* Supprimer le code existant.
* Ajouter le code suivant et enregistrer la page:

## Tester votre nouveau script

* Rendez-vous sur "votre page de test".
* Ajouter le code suivant et enregistrer la page:
Le résultat doit correspondre à ceci:

   ### for

       i = 2
       i = 4
       i = 6
       i = 8
       i = 10

   ### while

       i = 2
       i = 4
       i = 6
       i = 8
       i = 10

   ### repeat

       i = 2
       i = 4
       i = 6
       i = 8
       i = 10

## Comprendre le nouveau script

* local et le code qui suit, définit les variables i et result. Les deux sontnil.
* result = ';for\n' assigne une chaine de caractère littérale comme valeur à la variable result.
    This could also have been written with the initial variable declaration as local result = ';for\n'. There is no difference in functionality, only in the author's preference for coding style. Some programming languages require variables to be declared before they are used, resulting in some developers preferring to see variables declared before they are used...
* Attention
* for i = 2, 10, 2 do créé un bloc de code pour la boucle qui va modifier la valeur de la variable i de 2 à 10 selon un intervalle (le pas en mathématique) de 2.
** Les boucles for sont les plus communes, à utiliser lorsque le nombre de boucles est facile à déterminer. Ce sont typiquement des boucles de comptage.
** Les boucles for peuvent progresser selon une séquence positive ou négative. for i = 10, 2, -2 do va décrémenter de 10 à 2 par séquence de -2.
** Si la valeur de la séquence n'est pas fournie, sa valeur par défaut est 1 (le cas le plus courant). for i = 1, 10 do incrémente 1 jusqu'à 10 par séquence de 1.
* result = result .. ":i = " .. i .. '\n' concatène une chaine de caractères littérale et la valeur courante de la variable i dans result.
* end termine la boucle.
    La valeur de la variable de la boucle, i dans notre cas, sera incrémenté une fois de plus, que la valeur de fin de boucle. Dans cet exemple, i sera égal à 12 en sortant de la boucle.
* return result retourne la valeur courante de result comme résultat de la fonction.

### Comprendre le code de la boucle while

* local et le code qui suit, définit les variables i et result. Les deux sont nil.
* result = ';while\n' assigne une chaine de caractère littérale comme valeur à la variable result.
* i = 2 assigne la valeur 2 à la variable i.
    This could also have been written with the initial variable declaration as local i = 2.
* Attention
* while i <= 10 do créé un bloc de code qui va se répéter tant que la valeur de i est inférieure à 10.
** Les boucles "while" ou "tant que" sont nécessaire quand le nombre de boucle est déterminé à l’intérieur de la boucle, "du type répète jusqu’à ce que la fin de la chaine soit atteinte". Ici nous utilisons la boucle while uniquement pour montrer la différence dans la structure du code entre les boucles while, repeat et for.
** Si la condition de la boucle while n'est pas respectée, le bloc de code de la boucle sera ignoré.
** If the while loop condition is met, the while loop condition must be altered inside the loop, or the loop will repeat forever. (aussi vrai pour une boucle for)
* result = result .. ":i = " .. i .. '\n' concatène une chaine de caractères littérale et la valeur courante de la variable i dans result.
* i = i + 2 prend la valeur courante de i, additionne 2, et stock le résultat dans i.
* end fin de la boucle.
* return result retourne la valeur courante de result comme resultat de la fonction.

### Comprendre le code de la boucle "repeat"

* local et le code qui suit, définit les variables i et result. Les deux sont nil.
* result = ';repeat\n' assigne une chaine de caractère littérale comme valeur à la variable result.
* i = 2 assigne la valeur 2 à la variable i.
* repeat créé un bloc de code qui va se répéter jusqu'à ce que la condition de fin soit vraie.
** Les boucles "repeat" sont nécessaire quand le nombre de boucle est déterminé à l’intérieure de la boucle, "du type répète jusqu’à ce que la fin de la chaine soit atteinte"
** La différence entre "while" et "repeat" est que la boucle repeat s'exécute au moins une fois, même si la condition n'est pas respectée.
** If the repeat loop condition is met, the repeat loop condition must be altered inside the loop, or the loop will repeat forever. (toujours vrai)
* result = result .. ":i = " .. i .. '\n' concatène une chaine de caractères littérale et la valeur courante de la variable i dans result.
* i = i + 2 prend la valeur courante de la variable i, additionne 2, et enregistre le résultat dans i.
* until i > 10 définit la condition qui est testée pour terminer la boucle. Si la condition est fausse, la boucle continue. Si la condition est vraie, la boucle se termine.
* return result retourne la valeur courante de result comme résultat de la fonction.

## Conclusion

Félicitation! Vous êtes capable de créer, tester et comprendre un script Lua qui contient des boucles. Continuez avec la leçon Fonctions.