Introduction au Lua/Fonctions Table
Un module Lua-Scribunto pour Mediawiki, est une page de l'espace de nom "Module" qui utilise une table comme variable locale pour stocker ses fonctions et variables mais aussi pour renvoyer la réponse à la fin du processus[1].
Le chapitre bibliothèques Lua, étudie les fonctions intégrées au langage et communément regroupées en librairies ou bibliothèques. Cette leçon vous apprendra comment utiliser les fonctions Lua de la librairie Table, dans vos scripts.
Prérequis
[modifier | modifier le wikicode]Cette leçon suppose que vous ayez assimilé la leçon Tables.
Créer un script Lua utilisant la librairie Table
[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.tablelibrary()
local numbers = {}
local result
math.randomseed(os.time())
for i = 1, 10, 1 do
table.insert(numbers, math.random(1, 10))
end
result = ';random numbers\n'
result = result .. ':' .. table.concat(numbers, ', ') .. '\n'
table.sort(numbers)
result = result .. ';sorted numbers\n'
result = result .. ':' .. table.concat(numbers, ', ') .. '\n'
table.remove(numbers, 1)
result = result .. ';after removing the first value\n'
result = result .. ':' .. table.concat(numbers, ', ') .. '\n'
table.sort(numbers, function(a, b) return a > b end)
result = result .. ';sorted in descending order\n'
result = result .. ':' .. table.concat(numbers, ', ') .. '\n'
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|tablelibrary}}
Le résultat doit correspondre à ceci
[modifier | modifier le wikicode]
- random numbers
- 2, 7, 5, 7, 5, 4, 9, 1, 10, 4
- sorted numbers
- 1, 2, 4, 4, 5, 5, 7, 7, 9, 10
- after removing the first value
- 2, 4, 4, 5, 5, 7, 7, 9, 10
- sorted in descending order
- 10, 9, 7, 7, 5, 5, 4, 4, 2
Comprendre le nouveau script
[modifier | modifier le wikicode]Pour comprendre les fonctions tablelibrary
:
local numbers = {}
définit une table vide nomménumbers
.math.randomseed(os.time())
La fonction utilise une base (aléatoire) pour le générateur pseudo-aléatoire, on utilise communément os.time()[2].- Sans le générateur de base aléatoire, nous obtiendrons souvent la même séquence. Le logiciel MediaWiki stock les résultats en mémoire cache, il faudrait donc purger le cache pour obtenir de nouveaux résultats.
for i = 1, 10, 1 do
crée une boucle qui se repetera10
fois.table.insert(numbers, math.random(1, 10))
appel la fonctionrandom
de la librairiemath
pour récupérer un nombre aléatoire entre1
et10
, inclus, et insert cette valeur dans le champsnumbers
de la table.table.concat(numbers, ', ')
récupère toutes les données de la tablenumbers
pour les convertir en chaine de caractères concaténée avec le séparateur', '
entre chaque valeur.table.sort(numbers)
tri la tablenumbers
dans l'ordre croissant, ordre de tri par défaut.table.remove(numbers, 1)
supprime l'élément à la position1
de la table.- Dans la mesure où la table est triée au préalable, nous supprimons la plus petite valeur de la table.
table.sort(numbers, function(a, b) return a > b end)
tri la tablenumbers
dans l'ordre décroissant. La fonctiontable.sort
attend comme second argument optionnel une comparaison obtenue par le biais d'une fonctionfunction(a, b) return a > b end
. Cette fonction est une comparaison logique qui vraie lorsque le premier argument est supérieur au second.- L'emploi d'une fonction de comparaison logique comme second argument, autorise toute sorte de tri sur des tables complexes , retenez
function(a, b) return a > b end)
permet d'inverser l'ordre de tri[3]. - Si vous avez régulièrement besoin d'inverser l'ordre de tri, vous devez déclarer votre fonction de comparaison sur la seconde ligne de votre script:
function descending(a, b) return a > b end
pour pouvoir invoquer la fonction de tri ainsi:table.sort(numbers, descending)
.
- L'emploi d'une fonction de comparaison logique comme second argument, autorise toute sorte de tri sur des tables complexes , retenez
Conclusion
[modifier | modifier le wikicode]Félicitation! Vous êtes capable de créer, tester et comprendre un script Lua qui contient des fonctions de la librairie Table. Le prochain chapitre porte sur les bibliothèques de fonctions spécifiques à l’extension Scribunto.
Voir aussi
[modifier | modifier le wikicode]Références
[modifier | modifier le wikicode]