Gestion des fonctions utilisateur
|
La fonction ~defunc() permet de définir une fonction.
Elle prend deux arguments:
- Le nom de la fonction
- Le code de la fonction
Exemple:
~defunc('fonction',
"ma variable vaut :".x
)
L'appel d'une fonction utilisateur se fait exactement de la même manière qu'une fonction Templeet:
~rem(
x="une valeur";
)
~fonction()
Résultat:
ma variable vaut :une valeur
Les fonctions crées de cette manière sont identiques à celles créées par la notation fonction() décrite dans core.
La fonction ~sparam() permet de récupérer les paramètres passés à une fonction utilisateur.
Elle accepte un seul paramètre :
- Le numéro du paramètre
Exemple :
~defunc('cherche',
"Le résultat de la recherche de ".sparam(1)." dans ".sparam(2)." est: ".preg(sparam(1),sparam(2)))
~cherche("/(b.*e)/","abcdef")
sparam(1) va prendre alors la valeur "/(b.*e)/", et sparam(2) "abcdef".
Le résultat est:
Le résultat de la recherche de /(b.*e)/ dans abcdef est: bcde
Contrairement à la plupart des langages l'évaluation des paramètres est tardive. Les paramètres ne sont pas évalués au moment de l'appel de la fonction mais au moment de l'appel de la fonction sparam(). Cet aspect a deux conséquences. D'une part il est possible de passer des paramètres qui seront évalués de différentes manières selon le contexte dans la fonction et d'autre part, si on doit accéder plusieurs fois à un paramètre, que son évaluation est constante dans la fonction et que le code passé en paramètre est un peu complexe, il peut être plus intéressant de ne procéder qu'une seule fois à l'évaluation du paramètre, stocker le résultat dans une variable temporaire et utiliser ensuite cette variable pour récupérer le contenu du paramètre.
Les fonctions anonymes sont des fonctions sans nom qui peuvent être manipulées comme des valeurs.
Exemple:
ma_fonction=anonfunc(
{
x="une valeur";
"valeur de retour de la fonction anonyme"
});
La variable ma_fonction contient la fonction anonyme créée. Cette fonction peut alors être évaluée à l'aide de evalanonfunc:
~evalanonfunc(ma_fonction2)
~string(x)
qui produira comme résultat:
valeur de retour de la fonction anonyme
une valeur
Les fonctions anonymes peuvent prendre des paramètres. Ils sont passés à l'appel de evalanonfunc:
~rem(
x=0;
ma_fonction=anonfunc(
{
x+=sparam(1);
x;
}
);
)
premier appel: ~evalanonfunc(ma_fonction,5)
deuxième appel: ~evalanonfunc(ma_fonction,8)
donnera le résultat suivant:
premier appel: 5
deuxième appel: 13