Variadique

Définition, exemples et bonnes pratiques

À 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 *args permet de créer une fonction variadique.
  • En JavaScript, l'opérateur de décomposition (spread operator) ...args remplit 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

à arité variable n-aire

Antonymes

à arité fixe

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.