Introduction au Lua/Fonctions Table

Début de la boite de navigation du chapitre

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].

Fonctions Table
Icône de la faculté
Chapitre no 15
Leçon : Introduction au Lua
Chap. préc. :Fonctions Texte
Chap. suiv. :Scribunto objet Title
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Introduction au Lua : Fonctions Table
Introduction au Lua/Fonctions Table
 », n'a pu être restituée correctement ci-dessus.


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

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

Créer un script Lua utilisant la librairie Table

modifier
  1. Accéder au Module:Sandbox.
  2. Supprimer le code existant.
  3. 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
  1. Rendez-vous sur "votre page de test".
  2. Ajouter le code suivant et enregistrer la page:
{{#invoke:Sandbox|tablelibrary}}

Le résultat doit correspondre à ceci

modifier
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

Pour comprendre les fonctions tablelibrary :

  1. local numbers = {} définit une table vide nommé numbers.
  2. 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.
  3. for i = 1, 10, 1 do crée une boucle qui se repetera 10 fois.
  4. table.insert(numbers, math.random(1, 10)) appel la fonction random de la librairie math pour récupérer un nombre aléatoire entre 1 et 10, inclus, et insert cette valeur dans le champs numbers de la table.
  5. table.concat(numbers, ', ') récupère toutes les données de la table numbers pour les convertir en chaine de caractères concaténée avec le séparateur ', ' entre chaque valeur.
  6. table.sort(numbers) tri la table numbers dans l'ordre croissant, ordre de tri par défaut.
  7. table.remove(numbers, 1) supprime l'élément à la position 1 de la table.
    Dans la mesure où la table est triée au préalable, nous supprimons la plus petite valeur de la table.
  8. table.sort(numbers, function(a, b) return a > b end) tri la table numbers dans l'ordre décroissant. La fonction table.sort attend comme second argument optionnel une comparaison obtenue par le biais d'une fonction function(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).

Conclusion

modifier

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

Références

modifier

Lua for Wikiversity (en)