[JAVA] Argumente variabler Länge in verschiedenen Sprachen

Viele Sprachen können eine beliebige Anzahl von Funktionsargumenten übergeben, aber jede hat leicht unterschiedliche Spezifikationen.

C Sprache

In der C-Sprache besteht printf, das zuerst beim Lernen verwendet wird, ebenfalls aus Argumenten variabler Länge, aber es ist überraschend schwierig, eine solche Funktion zu erstellen.

Eine Datei mit dem Namen "stdargs.h" enthält Makros für Argumente variabler Länge.

Die Merkmale der Implementierung sind wie folgt.

JavaScript

Bis zu ES5

Im Fall von JavaScript bis ES5 gibt es keine spezielle Notation, die als Argument mit variabler Länge bezeichnet wird, aber sie entspricht dem Argument mit variabler Länge selbst, da es kein Problem gibt, selbst wenn die Zahlen nicht zwischen dem formalen Argument und dem tatsächlichen Argument übereinstimmen. Ich kann es schaffen

In einer JavaScript-Funktion sind die Argumente in einem "Array-ähnlichen Objekt" namens "Argumente" enthalten, und Sie können die Anzahl der Argumente mit "Argumente.Länge" abrufen. Wenn es ein formales Argument gibt, gab es außerdem das Verhalten, dass das Element "Argumente" an derselben Position wie das formale Argument verknüpft ist, aber es wird im strengen Modus von ES5 abgeschafft.

Sie können den Index einfach mit "für" drehen oder, wenn Sie ihn in ein reales Array konvertieren möchten, mit "Array.prototype.slice.call (Argumente)".

Wenn Sie den Inhalt des Arrays in eine Argumentliste konvertieren möchten, können Sie dies mit der Funktion .apply (Objekt, Array) tun.

ES6 In ES6 ist es möglich, "Argumente variabler Länge als Array zu empfangen" und "ein Array usw. zu erweitern und an die Argumente zu übergeben" mit demselben "..." (Spread-Operator) wie PHP. Beachten Sie, dass in der Pfeilfunktion von ES6 (Funktionsnotation mit =>) Argumente auch ** erbt, was sich außerhalb ** befindet ([MDN](https: //developer.mozilla). org / ja / docs / Web / JavaScript / Referenz / Pfeilfunktionen)). Schreiben wir es gehorsam mit dem Spread-Operator.

Ruby Ruby unterstützt explizit Argumente variabler Länge und verwendet die genaue Anzahl der Argumente. Wenn bei der Deklaration eines formalen Arguments ein Argument mit dem Präfix "*" angegeben wird, werden die verbleibenden Argumente als Array empfangen (von Natur aus kann nur eines in die Argumentliste geschrieben werden).

Anzahl der Argumente


def foo (arg1, *rest)
  #Benötigt mindestens ein Argument
end

def bar (*args)
  #Kein Problem
end

def baz (*args, last)
  #Separat*Das angehängte Argument muss nicht das letzte sein
end

Wenn Sie ein Array erweitern und als Argument verwenden möchten, können Sie es erweitern, indem Sie wie "method (* arr)" schreiben.

PHP Im Fall von PHP hat PHP 5.6 oder höher die Syntax "..." und wie "*" in Ruby werden Argumente variabler Länge automatisch in ein Array gepackt. Sie können dieser Argumentliste auch Typhinweise hinzufügen.

Selbst in PHP 5.5 und früheren Versionen kann die Funktion mehr Argumente als das formale Argument empfangen und von Funktionen wie "func_get_args" und "func_num_args" verarbeitet werden.

Wenn Sie ein Array als Argument erweitern möchten, können Sie "..." in PHP 5.6 und höher verwenden, und sogar vorher können Sie "call_user_func_array" verwenden.

Recommended Posts

Argumente variabler Länge in verschiedenen Sprachen
Zusammenfassung der Stammklassen in verschiedenen Sprachen
Parallele und parallele Verarbeitung in verschiedenen Sprachen (Java Edition)
Verschiedene Renten in Japan
Verschiedene Threads in Java
Verwenden Sie den Konstruktor mit Argumenten in cucumber-picocontainer
Wie Speicher in objektorientierten Sprachen funktioniert
So testen Sie eine private Methode, die ein Array- oder Argument variabler Länge in JUnit verwendet