# Perfectionnement en Lua/Organiser les fonctions

Nous avons ébauché une fonction site puis une fonction namespace(s) qui utilisent les sous-fonctions form_table et form_namespace.
Ce chapitre nous permettra d’améliorer l’utilisation des fonctions de notre script. Nous aborderons enfin, les fonctions elle-mêmes disponibles, dans les tables la librairie mw.site.

## Prérequis

Ce chapitre suppose que vous ayez assimilé les leçons Perfectionnement en Lua/Scribunto objet Site et Perfectionnement en Lua/Manipuler une table complexe.

## Créer un script Lua avec des sous-fonctions

* Accéder au Module:Bac à sable.
* Supprimer le code existant.
* Ajouter le code suivant et enregistrer la page :

## Scinder une sous-fonction

La fonction site doit être capable d’utiliser la fonction namespace. Nous devons écrire le correspondant.
Si l’utilisateur appel la table namespaces nous devons filtrer les arguments deux et trois qui contiendront alors ; l’id de la table pour l’espace sélectionné, la clé de la valeur à afficher pour la table sélectionnée.
La fonction p.namespace(frame), doit pouvoir continuer à fonctionner ; nous allons la vider pour créer une sous-fonction.
Nous ajoutons la ligne suivante à la fonction site
Nous créons la sous-fonction namespace, dans laquelle nous copions le contenu de p.namespace. Ensuite nous organisons les arguments filter et key qui recevront les arguments frame des fonctions appelantes.
Nous pouvons désormais utiliser la sous-fonction dans la fonction principale ; en attribuant les arguments de l’objet frame.

## Exploiter les fonctions Site

La librairie Site met à disposition des fonctions, pour faciliter nos manipulations.
Nous utilisons la fonction mw.site.stats.pagesInNamespace( ns ) pour ajouter le nombre des pages de l’espace à la fonction form_namespace :

### Utilisation des meta-tables

La librairie site offre des meta-tables qui permettent de filtrer facilement les espaces de noms selon qu’il s’agisse d’espace sujet ou d’espace de discussion.
* subjectNamespaces : table des espaces de noms sujets.
* talkNamespaces : table des espaces de noms discussions.
* associated : table de l’espace de nom associé (précédent ou suivant).
Notre fonction p.form_namespace reçoit la meta-table site.subjectNamespaces ; c’est-à-dire qu’elle tient compte uniquement des espaces sujets. Nous souhaitons désormais afficher un résumé des caractéristiques de chaque espace de nom associé.
Nous utilisons la meta-table associated pour ajouter un résumé de l’espace discussion :

### mw.site.interwikiMap

Lors de l’observation du contenu de la table site, nous avons remarqué la présence de la fonction interwikiMap. La mw:LUAREF précise que la fonction retourne la tables des liens interwiki.
L’exercice consiste à créer la fonction capable d’afficher :
* la liste des liens interwikiMap (complète ou filtrée selon local/!local)
* la table de chaque lien (complète ou filtrée selon la clé souhaitée)

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

Félicitation! Vous êtes capable de créer, tester et comprendre un script Lua qui contient des sous-fonctions. Vous êtes en mesure d’administrer les arguments issus de l’objet frame et ceux utiles aux sous-fonctions. Continuez avec le chapitre Créer un modèle Lua, vous apprendrez à administrer les arguments issus des modèles.