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

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

## Créer un script Lua utilisant la librairie Table

* 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
   #### 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

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.
    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 repetera 10 fois.
* 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.
* 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.
* table.sort(numbers) tri la table numbers dans l'ordre croissant, ordre de tri par défaut.
* 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.
* 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.
** 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

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.