Une fonction variadique est une fonction qui accepte un nombre indéfini de paramètres.
Voyons quelle est la raison de ces fonctions en Java. Supposons que nous ayons une méthode de sommation qui reçoit deux entiers et renvoie la somme des deux.
public static int summation(int a, int b) { return a + b; }
Si nous voulons ajouter trois nombres, nous devrons surcharger la méthode de sommation pour accepter trois paramètres.
public static int summation(int a, int b, int c) { return a + b + c; }
Que se passe-t-il si nous voulons ajouter quatre nombres ? Encore une fois, la méthode de sommation doit être surchargée.
public static int summation(int a, int b, int c, int d) { return a + b + c + d; }
Comme nous pouvons le voir, cela n'est pas évolutif, car chaque fois qu'un nombre différent de paramètres est nécessaire, la méthode devrait être à nouveau surchargée. À ce stade, vous pouvez envisager de passer un tableau d'entiers en tant que paramètre, mais cela ne fait rien d'autre que d'envelopper les paramètres réels et de faire dépendre explicitement la méthode d'un nouveau type de données.
Pour ces cas, des fonctions variadiques existent, pour accepter un nombre indéfini de paramètres sans avoir besoin de les envelopper dans un autre type de structure visible. Il est important de considérer qu'en interne, Java crée un tableau avec les paramètres qui sont transmis à la fonction variadique, afin que nous puissions travailler avec les méthodes d'un tableau.
Une fonction variadique est déclarée de la même manière que n'importe quelle fonction normale, mais en tant que paramètres, le dernier ou le seul paramètre dont elle dispose devra respecter le format suivant : type de données... nom de variable. Dans la manière dont il est déclaré, la seule chose qui change est l'ajout des trois points... après le type de données. Dans certaines langues, ce type de paramètre est appelé varargs. Voyons à quoi ressemble la méthode de sommation comme une fonction variadique.
public static int summation(int... numbers) { int sum = 0; for (int number : numbers) { sum += number; } return sum; }
Nous pouvons désormais ajouter n'importe quel nombre de nombres sans avoir besoin de surcharger la méthode de sommation, avec la seule restriction qu'ils doivent tous être du même type de données.
System.out.println(summation(1, 2)); // 3 System.out.println(summation(1, 2, 3)); // 6 System.out.println(summation(1, 2, 3, 4)); // 10 System.out.println(summation(2, 8, 16, 32, 64, 128, 256, 512, 1024, 2048)); // 4090
Avant, il a été mentionné qu'en interne Java gère les paramètres d'une fonction variadique comme un tableau, c'est-à-dire qu'il les enveloppe dans un tableau, ce qui nous permet de travailler avec les méthodes d'un tableau. Par exemple, vous pouvez utiliser la méthode sum de la classe Arrays pour ajouter tous les éléments du tableau dans la méthode de sommation.
public static int summation(int... numbers) { return Arrays.stream(numbers).sum(); }
Compte tenu de ce qui précède, une fonction variadique peut également se voir passer en paramètre un tableau du type de données qu'elle accepte, aussi curieux que cela puisse paraître. De cette façon, Java n'a plus besoin d'envelopper les paramètres dans un tableau, puisqu'un tableau est passé directement en argument.
public static int summation(int a, int b) { return a + b; }
Mais que se passe-t-il si la méthode de sommation, pour une raison quelconque, a besoin d'un deuxième paramètre de type double, en plus des n entiers qu'elle peut déjà recevoir lorsqu'elle est déclarée comme fonction variadique. Dans ce cas, la méthode de sommation devra être déclarée avec les paramètres supplémentaires dont elle a besoin et à la fin le paramètre variadique ou varargs, comme indiqué ci-dessous.
public static int summation(int a, int b, int c) { return a + b + c; }
De cette façon, vous pouvez passer un nombre double comme premier paramètre et les entiers que vous souhaitez ajouter comme paramètres supplémentaires et Java saura automatiquement que le premier paramètre est de type double et les suivants sont de type int, considérez que le paramètre variadique doit toujours être le dernier paramètre de la fonction, et non le premier, car cela générerait une erreur de compilation, même l'EDI lui-même nous dirait ce qui suit : le paramètre varargs doit être le dernier paramètre.
public static int summation(int a, int b, int c, int d) { return a + b + c + d; }
En conclusion, si une fonction utilitaire est requise pour effectuer un certain type d'opérations avec un nombre indéfini de paramètres et que nous ne voulons pas transmettre explicitement un tableau ou une liste, l'utilisation d'une fonction variadique peut être envisagée. Ceux-ci sont utiles, ils permettent au code d'être plus propre et plus évolutif, et ils évitent la surcharge des méthodes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!