Valeurs par défaut

 Assigner une valeur par défaut à un argument d'une fonction (ou d'une méthode de classe) permet d'omettre un paramètre lors l'appel de cette fonction.
 La syntaxe complète de l'interface est:

type [,type]* nom(type nom [= expression] [, type nom [= expression]]* )

ce que l'on détaillera ainsi:
- un ou plusieurs types de retour,
- le nom de la fonction,
- entre parenthèses, un ou plusieurs arguments de la forme chacun:
  * type de l'argument
  * nom de l'argument
  * et en option, l'assignement d'une valeur...

Exemple de fonction avec un argument doté d'une valeur par défaut.
Puis appel, avec un ou deux paramètres.
int increment(int x, int y = 1)
  x + y
return x

print increment(10, 5)
print increment(10)
Affiche: > 15
> 11

Quand la fonction est appellée avec un seul paramètre, la valeur par défaut 1 est utilisée pour remplacer le second paramètre manquant.

Si l'interface d'une fonction a plusieurs arguments avec une valeur par défaut, vous ne pouvez en omettre un lors de l'appel sans omettre tous les suivants. Les arguments ne pourraient être identifiés par leur type.

Utilisation d'une liste

Si ce que l'on veut, c'est une fonction ayant un nombre et des types de paramètres variable, vous devez plutôt utiliser un tableau ou dictionnaire.

Exemple de fonction avec une liste en argument

L'appel de la fonction donne une liste en paramètre et le corps de la fonction prend les argurments dans la liste.
text taille, nom, ville

void
param(dict parlist)
  taille = parlist["taille"]
  nom = parlist["nom"]
  ville = parlist["ville"]
return

dict d = dict("170", "Untel", "Nice")
param(d)
print taille, nom, ville
Affiche: > 170 Untel Nice

Dans cet exemple, les variables "taille", "nom", "ville" sont globales, et elle sont assignées par le contenu du dictionnaire en argument.

Il est possible d'appeler la fonction avec un tableau de moins de deux éléments, ce qui remplit le même rôle que l'emploi d'arguments par défaut.
Pour que cet exemple soit parfait en fait, on devrait utiliser des assignements conditionnels, au symbole d'assignement conditionnel :=
x := y

x est assigné par la valeur de y seulement si y n'est pas nil, ou si x n'a jamais été assigné auparavant.

Dans la même fonction, on remplace les assigements simples par des assignements conditionnels.
Seuls les éléments présents dans le tableaux seront assignés. Les autres sont ignorés.
text taille, nom, ville

void
param(dict parlist)
  taille := parlist["taille"]
  nom := parlist["nom"]
  ville := parlist["ville"]
return

dict d
d["taille"] = "170"
d["ville"] = "Nice"
param(d)
print taille, nom, ville
Affiche: > 170 Nice


 Exercices
1) Soit une fonction affichant un texte et une valeur:
    void nom(text x, int y)
       print x, y
   return
  On veut que le paramètre x ait par défaut la valeur "valeur=", réécrire la fonction en conséquence.

Réponse