Parameters (Parameter)
Kurz: Platzhalter-Variablen in der Definition einer Methode oder Funktion, über die beim Aufruf konkrete Werte (“Argumente”) hineingereicht werden.
Genauer: Eine Methode kann mehrere Parameter mit jeweils festem Typ und Name erwarten; über Overloading lassen sich mehrere Varianten derselben Methode mit unterschiedlichen Parameterlisten definieren. Manche Sprachen unterscheiden zwischen Übergabe per Wert (eine Kopie wird übergeben) und per Referenz (ein Verweis auf das Original) — bei Objekten wird meist die Referenz übergeben, bei einfachen Werten oft eine Kopie.
Im Detail
Ein wichtiger, oft übersehener Unterschied: Parameter sind die Platzhalter-Namen in der Methodendefinition, Argumente sind die konkreten Werte, die beim tatsächlichen Aufruf übergeben werden.
// "betrag" ist der Parameter (Teil der Definition)
void einzahlen(double betrag) {
saldo += betrag;
}
konto.einzahlen(100.0); // "100.0" ist das Argument (Teil des Aufrufs)Die Unterscheidung zwischen Übergabe per Wert und per Referenz ist einer der häufigsten Verwirrungspunkte für Einsteiger:
void aendereZahl(int zahl) {
zahl = 99; // ändert NUR die lokale Kopie
}
void aendereListe(List<Integer> liste) {
liste.add(99); // ändert die ORIGINAL-Liste, weil eine Referenz übergeben wurde
}
int x = 5;
aendereZahl(x);
System.out.println(x); // immer noch 5 - primitive Werte werden kopiert
List<Integer> l = new ArrayList<>();
aendereListe(l);
System.out.println(l); // enthält jetzt 99 - Objekte werden per Referenz übergebenPrimitive Werte (Zahlen, Booleans) werden beim Übergeben kopiert — Änderungen an der Kopie innerhalb der Methode wirken sich NICHT auf die Original-Variable des Aufrufers aus. Bei Objekten (inklusive Arrays und Collections) wird dagegen nur eine Referenz übergeben — beide Variablen (die des Aufrufers und der Parameter innerhalb der Methode) zeigen auf DASSELBE zugrunde liegende Objekt, weshalb Änderungen daran auch nach dem Methodenende sichtbar bleiben.
Manche Sprachen bieten zusätzlich Standardwerte für Parameter (wird kein Argument übergeben, greift automatisch ein vordefinierter Wert) und benannte Parameter (Argumente werden beim Aufruf explizit nach Namen statt nach Position zugeordnet) — beides reduziert die Notwendigkeit für Overloading, indem eine einzige Methode flexibler mit unterschiedlich vielen Argumenten aufgerufen werden kann.
Siehe auch: Methods, Overloading