« Initiation au Lua avec Scribunto/Autres fonctions standards » : différence entre les versions

Contenu supprimé Contenu ajouté
m →‎Fonctions concernant la librairie Scribunto : Pour réaliser une véritable recopie du contenu de la table A dans la table B, on utilisera la fonction préprogrammée '''mw.clone''' en écrivant '''B = mw.clone(A)'''
Anpanman (discussion | contributions)
m typo
Ligne 8 :
}}
 
Dans les chapitres précédents, nous avons étudié certaines catégories de fonctions. Ces catégories étaitétaient suffisamment grandegrandes pour que nous leursleur consacrions un chapitre entier. Il nous reste toutefois à étudier d'autres catégories de fonctions qui contiennent peu de fonctions. Nous consacrons donc ici ce chapitre aux fonctions qui appartiennent aux catégories restantes.
__TOC__
{{Clr}}
== Fonctions concernant les tables ==
 
Les exemples donnés dans ce paragraphe se trouvetrouvent dans le [[Module:Tables]].
 
==== table.insert ====
 
La fonction '''table.insert''' permet de rajouter un élément dans une table avec clé numérique, mais pas forcément à la fin comme on a l'habitude de le faire. La fonction '''insert''' permet d'insérer un élément à une clé déjà existante en décalant tous les objets déjà présentprésents à partir de cette clé. Prenons un exemple pour mieux comprendre.
 
Des voitures s’apprêtent à faire une course sur un circuit. Supposons les voitures numérotées dans lesquelles se trouvent des conducteurs. Supposons que Natacha arrive en retard et veuille absolument conduire la voiture 3 (déjà occupé) car 3 est son numéro fétiche. On va donc donner la voiture 3 à Natacha. Le conducteur de la 3 ira dans la 4. Le conducteur de la 4 ira dans la 5 et ainsi de suite. Ceci est réalisé grâce à l'instruction '''table.insert(circuit,3,"Natacha")'''
Ligne 30 :
function p.insertion()
local reponse = " "
reponse = reponse.."<br /><u>voitures avant l'arrivéarrivée de Natacha.</u>"
for voiture, conducteur in ipairs(circuit) do
reponse = reponse.."<br />La voiture "..voiture.." est conduite par "..conducteur.."."
Ligne 53 :
La fonction '''table.remove''' réalise le contraire de ce que faisait la fonction '''table.insert'''. Elle retire un élément de la table avec clé numérique et décale les éléments suivants de façon à boucher le trou.
 
Reprenons l'exemple précédent en supposant, cette fois qu'Alain, le conducteur de la voiture 3, ne se sente pas bien et renonce à prendre lale départ. Pour éviter qu’il y ait une discontinuité dans la numérotation des voitures, le conducteur de la voiture 4 va aller dans la 3. Le conducteur de la 5 va aller dans la 4 et ainsi de suite. Ceci est réalisé grâce à l'instruction '''table.remove(circuit,3)'''. Cette fonction retourne l'élément retiré.
 
Le programme décrivant l'occupation des voitures avant et après le départ d'Alain est le suivant :
Ligne 158 :
 
 
Les exemples donnés dans ce paragraphe se trouvetrouvent dans le [[Module:Temps]].
 
==== os.time ====
Ligne 202 :
Cette fonction donne le temps CPU d'exécution d'un programme en seconde. Cette fonction permet donc de mesurer le temps qui s'écoule entre deux parties d'un programme. Pour des exemples d'application voir, dans le chapitre sur la gestion de l'environnement, le paragraphe sur la vitesse d'exécution d'un programme. Voir aussi l'exercice 7-1.
 
Le temps CPU démarre au moment ou commence à s'afficher la page dans laquelle se trouve le module contenant la fonction '''os.clock''' et pas au moment où est lancé le module. Par conséquent, si dans une page, on met plusieurs modules utilisant la fonction '''os.clock''', on observera un temps d'autant plus grand que le module est près du bas de la page.
 
Le temps CPU est donné en seconde et est le plus souvent compris entre 2 et 20 millisecondes.
 
Si l’on veut chronométrer le temps d'exécution d'une partie d'un programme, on est obligé de mettre l'instruction avant et après la partie à chronométrer et de faire la différence entre les deux temps obtenuesobtenus. On obtient alors un temps généralement très inférieur à la milliseconde.
 
{{Attention|Compte tenu du fait que nos programmes s'exécutent sur un système multitâche, le temps donné par la fonction '''os.clock''' est très approximatif et sera différent d'une exécution à l'autre.}}
Ligne 254 :
 
 
Les exemples donnés dans ce paragraphe se trouvetrouvent dans le [[Module:Scribunto]]
 
 
Ligne 297 :
Dans l'exemple ci-dessous, la fonction '''codehex''' permet de convertir un nom de couleur (de la page [[w:Liste de couleurs|Liste de couleurs]]) en son code hexadécimal qu'elle retourne.
 
La fonction '''mw.loadData''' de l'exemple ci-dessous charge une table se trouvant dans le [[Module:Nomcouleur]]. Dans le [[Module:Nomcouleur]], la table chargée se nomme nuancier. On remarquera, en fin de module, l'instruction '''return nuancier''' pour que la table puisse être chargéchargée par la fonction '''mw.loadData''' à partir d'un autre module.
 
 
Ligne 317 :
 
 
'''Nota :''' Si l’on souhaite charger plusieurs tables s'appelant, par exemple, A, B, C à l'aide de la fonction '''mw.loadData''', il faut que dans le module appeléeappelé, il y ait l'instruction '''return {A, B, C}'''. En fait, on retourne une table de tables.
 
<br />
Ligne 348 :
 
 
En réalité, l'explication que nous venons de donner est très fragmentaire car nécessitant des éléments que nous n'avons pas encore étudiéétudiés. Nous reviendrons donc sur l'étude de cette fonction dans le chapitre consacré à l’objet ''frame'' pour essayer d’en donner une explication plus complète.
 
Pour le moment, nous nous contenterons de l'exemple suivant ou l’objet ''frame'' est recopié dans l’objet ''frami''. On visualise ensuite le contenu de l’objet ''frami'' comme on le ferait pour l’objet ''frame''.
Ligne 391 :
==== require ====
 
Cette fonction sera étudiée dans lale chapitre sur la gestion de l'environnement.
 
<br />