Lua/Tutorial/fr

Scribunto amène les modèles au niveau supérieur !

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

Courte présentation de Brad Jorsch sur un exemple de base pour convertir un modèle wikicode en module Lua.

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.

  1. (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 :

  1. soit y accéder directement par frame.args[1] et frame.args[2], respectivement (les arguments nommés peuvent aussi être utilisés, tels que frame.args["title"] ou frame.args.title)
  2. 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 :

  1. 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.
  2. 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"
  3. 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.
  4. 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 vaut nil (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
Category:Tutorials