À retenir
- Permet une flexibilité totale sur le nombre de paramètres.
- L'ordinateur traite souvent ces arguments sous forme de liste ou de tableau.
- S'oppose aux fonctions à arité fixe.
Se dit d'une fonction ou d'une méthode qui possède la particularité d'accepter un nombre indéterminé d'arguments lors de son appel. Imaginez une recette de cuisine où vous pourriez ajouter autant d'épices que vous le souhaitez : la fonction s'adapte automatiquement à la quantité d'éléments que vous lui envoyez.
Étymologie
Le terme est un néologisme apparu vers 2001, formé à partir du mot variable et du suffixe -adique (issu du grec et utilisé en logique pour désigner l'arité, c'est-à-dire le nombre d'arguments). Il suit le modèle de termes comme monadique (un argument) ou dyadique (deux arguments).
Exemples d'usage
- En Python, l'utilisation de
*argspermet de créer une fonction variadique. - En JavaScript, l'opérateur de décomposition (spread operator)
...argsremplit ce rôle. - La célèbre fonction
printf()en langage C est l'un des exemples les plus anciens.
Cas d'usage
On utilise les fonctions variadiques pour des opérations de formatage de texte, pour effectuer des calculs sur une liste de nombres (comme une somme ou une moyenne) dont on ne connaît pas la taille à l'avance, ou encore pour créer des fonctions de log (journalisation) flexibles.
Bonnes pratiques
Il est recommandé de placer l'argument variadique en dernière position dans la signature de la fonction pour éviter toute ambiguïté. De plus, il faut toujours prévoir le cas où aucun argument n'est transmis afin d'éviter des erreurs d'exécution.
Synonymes
Antonymes
Conseil
Quand vous débutez, utilisez les fonctions variadiques avec parcimonie. Elles sont très puissantes pour créer des outils génériques, mais une fonction avec des paramètres nommés et fixes reste souvent plus facile à lire et à documenter pour vos collègues.
Questions fréquentes
Quelle est la différence avec le passage d'un tableau ?
C'est principalement une question de confort : avec une fonction variadique, on passe les éléments séparés par des virgules sans avoir à créer explicitement une structure de tableau lors de l'appel.
Est-ce mauvais pour les performances ?
Généralement non, mais cela peut ajouter un léger surcoût car le langage doit emballer les arguments dans une structure de données interne.