Lua/Tutorial/fr
![]() | Wikibooks dispose d'un livre sur Lua Programming |

Bienvenue sur le tutoriel Scribunto-Lua destiné à aider les débutants à apprendre Lua pour écrire des scripts pour MediaWiki. Vous pouvez aussi lire le tutoriel présenté au Hackathon 2012 à Berlin (en anglais) ou suivre le cours en français Lua avec Scribunto de Wikiversité.
Comment utiliser ce tutoriel
Ce tutoriel a été développé à l’origine pour le Hackathon 2012 à Berlin, comme événement en présentiel. Il a été adapté pour le wiki, à distance, tel que vous le voyez ici. Comme tout être wiki, c’est un document vivant et nous vous encourageons à participer en déposant vos commentaires sur la page de discussion pour le développer et le maintenir.
Le contenu ci-dessous se focalise sur l’apprentissage pour des développeurs de modèles MediaWiki. Chacun est invité à l’utiliser. Si vous êtes nouveau dans l’écriture de modèles MediaWiki mais que vous avez de l’expérience en Lua, vous pouvez vous renseigner plus sur les modèles. Notez que quelques détails dans Scribunto ne s’appliquent pas à la distribution Lua. Si vous êtes un gourou des modèles MediaWiki, mais nouveau en Lua, vous apprendrez une nouvelle magie sympa. Si vous êtes nouveau dans les deux, vous trouverez dans la communauté MediaWiki plusieurs personnes qui pourront vous aider à apprendre.
Introduction à Lua

- Lua scripting informations générales et bref contexte historique de l'utilisation prévue des scripts Lua dans MediaWiki.
- Etat des scripts Lua dans MediaWiki
- Lua c'est quoi ? voir la démo sur Lua.org si vous ne souhaitez pas encore télécharger Scribunto.
- PDF de l'évolution de Lua et des versions Lua
- Quelles différences avec les langages JS et OO aurions-nous pu utiliser ?
- Scribunto: en quoi diffère l'implementation de Lua dans MediaWiki ?
Le Wikicode n'est pas analysé de la manière que vus l'auriez souhaité. Les frames d'analyse syntaxique sont les arguments des modèles Scribunto. Les strip markers remplacent certaines balises, qui lorsqu'elles sont passées, seront traduites en positions à substituer au lieu des balises. Vous devrez utiliser le nouvel espace de noms Module:
- Manières de suppléer à ces différences
Démonstration
Modèles suggérés que vous voudriez voir adaptés durant la démonstration
Placer ici un lien vers le modèle que vous voudriez voir adapté à Lua en tant que démonstration dans le tutoriel.
- (suggérer un premier modèle)
Hands-on Lua Scripting
- Créer une page dans l'espace de noms Module:
- Y placer le code Lua. Voici un squelette :
local p = {} function p.hello(frame) return 'Hello' end return p
- Aller sur la page de discussion du module
- Ecrire une instruction
#invoke
pour appeler votre nouveau module{{#invoke: my_module | hello }}
Accès aux paramètres du modèle
Les fonctions peuvent accéder à l'objet frame
pour obtenir les paramètres d'appel du modèle. Par exemple on modifie le module précédent de sorte à ce qu'il prenne deux arguments
{{#invoke: my_module | hello | hair | brown }}
Notre fonction Lua function peut utiliser les paramètres hair et brown de deux façons :
- soit y accéder directement par
frame.args[1]
etframe.args[2]
, respectivement (les arguments nommés peuvent aussi être utilisés, tels queframe.args["title"]
ouframe.args.title
) - soit en les itérant avec la fonction
frame:argumentPairs()
qui renvoie un couple (nom, valeur) pour chacun d'eux; c'est la meilleure façon de coder un modèle qui prend un nombre variable de paramètres
Voici un exemple simple de fonction qui utilise des paramètres :
local p = {} function p.hello(frame) return 'Hello, my ' .. frame.args[1] .. ' is ' .. frame.args[2] end return p
Quelques pièges à éviter :
- Les valeurs des paramètres sont toujours des chaînes, même s'il s'agit de nombres; vous pouvez utiliser la fonction Lua
tonumber()
si la valeur doit être traitée comme un nombre. - Néanmoins les paramètres numériques qui sont des clés sont effectivement des nombres, même s'ils sont passés explicitement dans l'appel du modèle (par exemple les paramètres de
{{#invoke:my_module | hello | world}}
et{{#invoke:my_module | hello | 1=world}}
sont indexés par le nombre 1, et non pas la chaîne "1" - Avec les paramètres nommés explicitement (ou numériques), les espaces de début et de fin sont supprimées dans le nom et dans la valeur. C'est la même chose pour les paramètres des modèles.
- Une chaîne vide n'est pas la même chose qu'une valeur absente qui vaut
nil
; par exemple{{#invoke:my_module | hello | world }}
donne frame.args[2] qui vautnil
(ce qui génère une erreur de script dans l'exemple de code ci-dessus), mais{{#invoke:my_module | hello | world | }}
donne frame.args[2] qui est une chaîne vide (qui ne génère pas d'erreur bien que le texte résultant sera étrange). Une manière de s'en sortir est d'assigner les paramètres souhaités à une variable locale et de remplacer les nil par des chaînes vides à cette étape; c'est à dire :local arg2 = frame.args[2] or ""
Implémentation de Lua (extrait de la feuille de route de MediaWiki)
Ressources externes pour les scripts Lua généraux (non-wiki)
Commentaires sur le tutoriel
Si vous avez vu le tutoriel en live à Berlin, veuillez nous faire parvenir votre commentaire sur la Page de discussion afin que nous puissions l'améliorer pour les hackathons à venir et les autres événements. Les réponses anonymes sont également acceptées si vous préférez.
Diaporama du tutoriel de Berlin
Category:Tutorials