Utilisateur:Juju2004/Conseils pour la programmation des modèles

Bonnes pratiques

Cette page a pour objectif de fournir un ensemble de conseils en matière de programmation de modèles.

Remarques :

Mise en forme du code modifier

La mise en forme du code est rendue difficile car chaque retour à la ligne introduit un espace dans le code. Néanmoins, il est possible d'utilier le fait que les ParserFunctions exécutent un trim sur leurs arguments pour mettre en forme le code ainsi :

{{#if:<test>
    | then
    | else
}}

Evidemment, un simple #if peut conserver la forme en ligne :

{{#if:<test>|then}}

Gestion des erreurs modifier

L'utilisation par chaque modèle d'une stratégie différente de gestion des erreurs entraîne des difficultés de maintenance. Il existe des modèles décrits Modèle:Fonctions modèle qui permettent de traiter les erreurs de manière unifiée.

Paramètre non renseigné modifier

La forme :

{{{param1|<font color="red">veuillez renseigner le paramètre 1</font>}}}

n'apporte strictement rien à la forme :

{{{param1}}}

qui affiche {{{param1}}} si le paramètre n'est pas renseigné. Elle est à exclure.

De même, le modèle {{Fonctions modèle/paramètre manquant}} est à utiliser avec retenue.

Factorisation : les fonctions modifier

Il est préférable de n'écrire un code qu'une seule fois, ce qui limite le risque d'erreur et la facilite la maintenance du modèle. En programmation structurée, on utilise des fonctions. En syntaxe wiki, la manière de créer des fonctions est de créer un sous-modèle qui sera appelé plusieurs fois par le modèle principal.

On nommera fonction un sous-modèle qui n'est jamais utilisé directement dans la rédaction des articles, mais toujours appelé par un modèle. Voici quelques règles concernant les fonctions :

  • Les fonctions devraient toujours être des modèles placés dans une sous-page de l'espace modèle ;
  • Ces sous-pages devraient toujours commencer par une minuscule ;
  • Les fonctions devraient avoir une 'syntaxe normalisée, c'est-à-dire où tous les paramètres sont nommés de manière explicite.
  • Les fonctions devraient être rassemblées, dans la mesure du possible, par domaine plutôt que par modèle d'appel, ce qui évitera de réécrire plusieurs fois des fonctions très similaires appelées par des modèles différents. Il est donc utile de développer des des modèles "Modèle:Fonctions <domaine>/<fonction>". ;
  • Les fonctions devraient posséder une sous-page de tests, sous la forme ""Modèle:Fonctions <domaine>/<fonction>/tests".

Remarque : lorsqu'une fonction est aussi un modèle, il est possible de créer un modèle interface dont la syntaxe sera moins lourde, avec des paramètres implicites.

Paramètres modifier

Nommage des paramètres modifier

Il est préférable de nommer les paramètres d'un modèle. Cependant, pour des questions de simplicité d'utilisation, il existe des exceptions :

Nombre de paramètres Nommé ou non
1 jamais
2 au choix
plus au choix pour les deux premiers ; les paramètres à partir du troisième sont toujours nommés

Remarque : les paramètres d'une fonction devraient toujours être nommés. La syntaxe est moins ambiguë, bien que plus lourde, mais cette lourdeur n'est pas gênante pour le contributeur car la fonction n'est jamais utilisée directement dans le Main.

Le contenu des paramètres modifier

Il est préférable de laisser le modèle réaliser le plus de travail possible, en partant des paramètres sous leur forme brute. En particulier, on laissera le modèle gérer les wikiliens. Par exemple, on préfèrera écrire :

{{<modèle>|nom=Géorgie|lien=Géorgie (pays)}}

à :

{{<modèle>|nom=[[Géorgie (pays)|Géorgie]]}}

En effet, on peut souhaiter étendre l'usage d'un modèles, mais cela suppose le plus souvent que les paramètres ne soient pas enrichis d'une mise en forme. Les changements éventuels de syntaxe sont également facilités par cette décomposition.

Les paramètres alternatifs modifier

La forme

{{{param1|{{{param2|{{{param3|{{{param4|}}}}}}}}}}}}

qui permet d'éviter des #if est à éviter en raison de l'accumulation d'accolades fermantes en fin de code.

Exception : pour passer des paramètres à une fonction, ont peut accepter la forme :

{{fonction|x= {{{param1|{{{param2|}}}}}} }}

Les syntaxes alternatives modifier

Modèle complexe modifier

Lorsqu'un modèle est complexe et possède plusieurs syntaxes alternatives, il est plus simple de développer une sous-page "Modèle:<nom du modèle>/syntaxe normalisée" ou tous les paramètres sont nommés. L'appel du modèle "interface" devient un aiguilleur qui analyse les paramètres et les renvoie vers la syntaxe normalisée.

Modification d'un modèle modifier

Lorsqu'un modèle subit une modification importante, avec changement de syntaxe et de comportement, la solution suivante est utile :

  • Renommer le modèle actuel en "Modèle:<nom du modèle>/ancienne syntaxe.
  • Nommer le nouveau modèle "Modèle:<nom du modèle>/nouvelle syntaxe"
  • Créer un aiguilleur de syntaxe qui catégorise une page utilisant le modèle déprécié dans une catégorie adaptée.

Exemple pour <nom du modèle> :

{{#if:<test>
    |{{<nom du modèle>/nouvelle syntaxe|<transmission de paramètres>}}
    |{{Fonctions modèle/syntaxe dépréciée|modèle=<nom du modèle>}}{{<nom du modèle>/ancienne syntaxe|<transmission de paramètres>}}
}}