Introduction au Lua/Boucles
Apparence
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[1].
Prérequis
[modifier | modifier le wikicode]Cette leçon suppose que vous ayez assimilé la leçon Conditions.
Créer un script Lua avec boucles
[modifier | modifier le wikicode]- Accéder au Module:Sandbox.
- Supprimer le code existant.
- Ajouter le code suivant et enregistrer la page:
local p = {}
function p.forloop()
local i
local result
result = ';for\n'
for i = 2, 10, 2 do
result = result .. ":i = " .. i .. '\n'
end
return result
end
function p.whileloop()
local i
local result
result = ';while\n'
i = 2
while i <= 10 do
result = result .. ":i = " .. i .. '\n'
i = i + 2
end
return result
end
function p.repeatloop()
local i
local result
result = ';repeat\n'
i = 2
repeat
result = result .. ":i = " .. i .. '\n'
i = i + 2
until i > 10
return result
end
return p
Tester votre nouveau script
[modifier | modifier le wikicode]- Rendez-vous sur "votre page de test".
- Ajouter le code suivant et enregistrer la page:
{{#invoke:Sandbox|forloop}} {{#invoke:Sandbox|whileloop}} {{#invoke:Sandbox|repeatloop}}
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
[modifier | modifier le wikicode]local
et le code qui suit, définit les variablesi
etresult
. Les deux sontnil
.result = ';for\n'
assigne une chaine de caractère littérale comme valeur à la variableresult
.- 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...
- This could also have been written with the initial variable declaration as
Attention |
for i = 2, 10, 2 do
créé un bloc de code pour la boucle qui va modifier la valeur de la variablei
de2
à10
selon un intervalle (le pas en mathématique) de2
.- 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 de10
à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émente1
jusqu'à10
par séquence de1
.
result = result .. ":i = " .. i .. '\n'
concatène une chaine de caractères littérale et la valeur courante de la variablei
dansresult
.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.
- La valeur de la variable de la boucle,
return result
retourne la valeur courante deresult
comme résultat de la fonction.
Comprendre le code de la boucle while
[modifier | modifier le wikicode]local
et le code qui suit, définit les variablesi
etresult
. Les deux sontnil
.result = ';while\n'
assigne une chaine de caractère littérale comme valeur à la variableresult
.i = 2
assigne la valeur2
à la variablei
.- This could also have been written with the initial variable declaration as
local i = 2
.
- This could also have been written with the initial variable declaration as
Attention |
while i <= 10 do
créé un bloc de code qui va se répéter tant que la valeur dei
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 variablei
dansresult
.i = i + 2
prend la valeur courante dei
, additionne2
, et stock le résultat dansi
.end
fin de la boucle.return result
retourne la valeur courante deresult
comme resultat de la fonction.
Comprendre le code de la boucle "repeat"
[modifier | modifier le wikicode]local
et le code qui suit, définit les variablesi
etresult
. Les deux sontnil
.result = ';repeat\n'
assigne une chaine de caractère littérale comme valeur à la variableresult
.i = 2
assigne la valeur2
à la variablei
.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 variablei
dansresult
.i = i + 2
prend la valeur courante de la variablei
, additionne2
, et enregistre le résultat dansi
.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 deresult
comme résultat de la fonction.
Conclusion
[modifier | modifier le wikicode]Félicitation! Vous êtes capable de créer, tester et comprendre un script Lua qui contient des boucles. Continuez avec la leçon Fonctions.
Voir aussi
[modifier | modifier le wikicode]Références
[modifier | modifier le wikicode]- ↑ http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/fr#Structures de contrôle Aide Mediawiki, structures de contrôle
Lua for Wikiversity by Dave Braunschweig (en)