[JAVA] Arguments de longueur variable dans différentes langues

De nombreux langages ont la capacité de transmettre n'importe quel nombre d'arguments de fonction, mais chacun a des spécifications légèrement différentes.

Langage C

En langage C, printf, qui est utilisé en premier dans l'apprentissage, est également composé d'arguments de longueur variable, mais il est étonnamment difficile de créer une telle fonction.

Un fichier appelé stdargs.h fournit des macros pour les arguments de longueur variable.

Les caractéristiques de l'implémentation sont les suivantes.

JavaScript

Jusqu'à ES5

Dans le cas de JavaScript jusqu'à ES5, il n'y a pas de notation spéciale étiquetée comme argument de longueur variable, mais elle correspond à l'argument de longueur variable lui-même car il n'y a pas de problème même si les nombres ne correspondent pas entre l'argument formel et l'argument réel. Je peux le faire.

Dans une fonction JavaScript, les arguments sont contenus dans un "objet de type tableau" appelé ʻarguments, et vous pouvez obtenir le nombre d'arguments avec ʻarguments.length. De plus, quand il y a un argument formel, il y avait un comportement que l'élément «arguments» à la même position que l'argument formel est lié, mais il est aboli dans le mode strict de ES5.

Vous pouvez simplement tourner l'indice avec for, ou si vous voulez le convertir en un tableau réel, vous pouvez le faire avec ʻArray.prototype.slice.call (arguments)`.

Si vous voulez convertir le contenu du tableau en une liste d'arguments, vous pouvez le faire avec function .apply (object to be this, array).

ES6 Dans ES6, il est possible de "recevoir des arguments de longueur variable sous forme de tableau" et de "développer et passer un tableau, etc. aux arguments" avec le même ... (opérateur de propagation) que PHP. Notez que dans la fonction Flèche d'ES6 (notation de fonction utilisant =>), ʻarguments` ** hérite également de ce qui est à l'extérieur ** ([MDN](https: //developer.mozilla. org / ja / docs / Web / JavaScript / Reference / arrow_functions)). Écrivons-le docilement avec l'opérateur de diffusion.

Ruby Ruby prend explicitement en charge les arguments de longueur variable et prend le nombre exact d'arguments. Lors de la déclaration d'un argument formel, s'il y a un argument préfixé par «*», il recevra les arguments restants sous forme de tableau (par nature, un seul peut être écrit dans la liste d'arguments).

Nombre d'arguments


def foo (arg1, *rest)
  #Nécessite au moins un argument
end

def bar (*args)
  #aucun problème
end

def baz (*args, last)
  #Séparément*L'argument joint n'a pas besoin d'être le dernier
end

Si vous voulez développer un tableau et l'utiliser comme argument, vous pouvez le développer en écrivant comme method (* arr).

PHP Dans le cas de PHP, PHP 5.6 ou version ultérieure a la syntaxe «...», et comme «*» en Ruby, les arguments de longueur variable sont automatiquement emballés dans un tableau. Vous pouvez également ajouter des indications de type à cette liste d'arguments.

Même dans PHP 5.5 et les versions antérieures, la fonction peut recevoir plus d'arguments que d'arguments formels et peut être traitée par des fonctions telles que func_get_args et func_num_args.

Si vous voulez développer un tableau comme argument, vous pouvez utiliser ... dans PHP 5.6 et versions ultérieures, et même avant cela, vous pouvez utiliser call_user_func_array.

Recommended Posts

Arguments de longueur variable dans différentes langues
Résumé des classes racine dans différentes langues
Traitement parallèle et parallèle dans divers langages (édition Java)
Diverses pensions au Japon
Divers threads en java
Utiliser le constructeur avec des arguments dans cucumber-picocontainer
Comment fonctionne la mémoire dans les langages orientés objet
Comment tester une méthode privée qui prend un tableau ou un argument de longueur variable dans JUnit