Ein Parameter ist in der Informatik ein veränderliches Element eines Programms oder Unterprogramms, das bei der Definition des Unterprogramms formal angelegt (formaler Parameter) und beim Aufruf des Unterprogramms für jeweils diesen einen Aufruf auf einen konkreten Wert gesetzt wird (tatsächlicher Parameter) oder aber ein „Schalter“, der Abläufe im Programm steuert (etwa der Kommandozeilenparameter).
Inhaltsverzeichnis |
Parameter werden in unterschiedlichen Funktionen in der Informatik verwendet:
Bei der Übergabe mehrerer Parameter ist es wichtig zu wissen, welche Bedeutung der einzelne Parameter hat. Hierzu gibt es zwei Erkennungsmethoden:
Die formalen Parameter werden bei der Deklaration eines Unterprogramms in einer Programmiersprache normalerweise als Argumente hinter dem definierenden Funktionsnamen angegeben. Damit ist es möglich, die Funktionsvorschrift so anzugeben, dass nicht bekannt sein muss, mit welchen konkreten Werten gerechnet werden soll. Oft erfordert die Angabe eines formalen Parameters nur die Angabe des verwendeten Datentyps.
Beispiel: Unterprogrammdeklaration in der Programmiersprache PASCAL bzw. Delphi mit x und y als formalem Parameter
FUNCTION Radius(x, y : REAL) : REAL; BEGIN Radius := SQRT( x*x + y*y ) END;
Die formalen Parameter, hier x und y, sind "Platzhalter" für die tatsächlichen Parameter.
Während des tatsächlichen Unterprogrammaufrufs werden durch die Parameterübergabe die tatsächlichen Parameter an die Funktion übergeben und definieren bei der Ausführung die Bedeutung der abstrakten formalen Parameter durch konkrete Werte oder konkrete Variablen. Im Deutschen findet man auch die Bezeichnung aktueller Parameter, die durch falsche Übersetzung des englischen Ausdrucks actual parameter (tatsächlicher Parameter) zustande kommt. Die Art der Übergabe ist von Programmiersprache zu Programmiersprache verschieden. Die Sprache Fortran verwendet beim Übersetzen festgelegte Speicheradressen für jedes Unterprogramm. Sprachen wie Pascal oder C verwenden den Stack oder Prozessorregister zur Parameterübergabe.
Beispiel: Aufruf des Unterprogramms mit verschiedenen tatsächlichen Parametern
r1 := Radius(x1, y1); -- tatsächliche Parameter x := x1 und y := y1 Durchmesser := 2 * Radius(13, -2); -- tatsächliche Parameter x := 13 und y := -2
Es gibt unterschiedliche Methoden, wie die formalen Parameter während der Parameterübergabe durch die tatsächlichen Parameter ersetzt werden:
In einem Makro wird der formale Parameter textuell durch den tatsächlichen Parameter ersetzt. Der Unterschied zu Namensparametern besteht darin, dass Namenskonflikte in Kauf genommen werden. Kommt in einem tatsächlichen Parameter eine Variable vor, welche den gleichen Namen wie eine lokale Variable besitzt, so wird bei der Makroexpansion die lokale Variable verwendet.
Moderne, prozedurale Programmiersprachen unterstützen in der Regel Wertparameter und Referenzparameter, manchmal auch Wertergebnisparameter.
proc test(a,b)
{
b = b + 1;
a = 10 * a;
}
a = 5;
b = 4;
test(a ,a);
print(a, b);
test(b, b);
print(b);
5 4 4
Erklärung: Es wird durch die Aufrufe von test keine Veränderung an den Variablen a und b durchgeführt, sodass die Variablen jeweils nach Beendung des Unterprogramms ihren ursprünglichen Wert beibehalten.
60 4 50
Erklärung: Bei der ersten Abarbeitung von test, aufgerufen in Zeile 9, verweisen sowohl die lokale Variable a als auch b auf den Speicherbereich von a, da a für beide Parameter angegeben wurde. Daher werden alle Veränderungen, die in test an a und b ausgeführt werden, im gleichen Speicherbereich ausgeführt. a hatte vor diesem Aufruf den Wert 5, wird in Zeile 3 um 1 erhöht und anschließend wird in Zeile 4 dieser Wert mit 10 multipliziert; also steht an der Speicherstelle nun der Wert 60. Zurück im Hauptprogramm weist a dann auf die Speicherstelle, an der die soeben berechnete 60 steht, also wird 60 in Zeile 9 für a ausgegeben ausgegeben. b wurde nicht geändert.
Nach dem gleichen Prinzip funktioniert die zweite Abarbeitung von test, aufgerufen in Zeile 11. Es verweisen sowohl die lokale Variable a als auch b auf den Speicherbereich von b, da b für beide Parameter angegeben wurde. Daher werden alle Veränderungen, die in test an a und b ausgeführt werden, im gleichen Speicherbereich ausgeführt. b hatte vor diesem Aufruf den Wert 4, wird in Zeile 3 um 1 erhöht und anschließend wird in Zeile 4 dieser Wert mit 10 multipliziert; also steht an der Speicherstelle nun der Wert 50. Zurück im Hauptprogramm weist b dann auf die Speicherstelle, an der die soeben berechnete 50 steht, also wird 50 in Zeile 12 für b ausgegeben.
50 5 6 oder 50
Erklärung: Beim zweiten Aufruf von test werden zwei Kopien von b erstellt, auf die a und b innerhalb von test zeigen. a hat bei Beendung des Unterprogramms den Wert 50, b hat den Wert 6. Je nach dem, welcher Wert zuerst in das ursprüngliche b zurück gespeichert wird, kann das Ergebnis variieren.
Zudem besteht bei vielen gängigen Programmen für alle gängigen Betriebssysteme die Möglichkeit, Parameter in der Befehlszeile zu übergeben, die dann beim Aufrufen bearbeitet werden.
Beispiel: Fiktiver Programmaufruf über die Befehlszeile unter Windows
programm.exe -parameter -weiterer -xyz=(a|b) /usw
Hiermit würde programm.exe mit den Parametern „parameter“, „weiterer“, „xyz=(a|b)“ und „usw“ aufgerufen werden. Parameter werden also mit oder ohne Wertangabe verwendet, wobei die Wertangabe dem Namen mit Leerraum, mit Sonderzeichen wie „=“ oder gar nicht abgegrenzt angehängt werden. Je nachdem, welches Programm verwendet wird, stehen verschiedene Parameter zur Verfügung; je nach Programm haben gleich benannte Parameter im Allgemeinen unterschiedliche Auswirkungen. Auch die formalen Regeln zur Angabe sind vom Programm abhängig; dass, wie im Beispiel, mehrere unterschiedliche Trennzeichen verwendet werden, ist zwar unüblich und dient nur der Demonstration, aber viele Programme bieten durchaus flexible Möglichkeiten.
Unter UNIX-artigen Systemen werden Parameter traditionell mit einzelnen Buchstaben angegeben und mit „-“ eingeleitet, wenn es sich um Optionen oder Schalter handelt, die aus einer für das jeweilige Programm feststehenden Menge ausgewählt werden können; dagegen werden Parameter nicht besonders eingeleitet, wenn es sich um Dateinamen und ähnliche freie Angaben handelt. Die Abgrenzung voneinander geschieht erforderlichenfalls durch Leerraum. Beispiel: „ls -l -t /usr/bin /usr/local/bin“ oder gleichbedeutend „ls -lt /usr/bin /usr/local/bin“. Bei Programme, die sowohl einbuchstabige als auch mehrbuchstabige Optionen annehmen, sind letztere mit „--“ einzuleiten.
Unter DOS wird traditionell „/“ an Stelle des „-“ verwendet und Werte von Parameternamen mit „=“ abgetrennt. Unter Windows sind beide Stile anzutreffen.
Allgemein kann man sagen, dass man bei der Verwendung von Befehlszeilenparametern oft schneller zu Ergebnissen kommt, als durch andere Bedienmöglichkeiten wie Dialogfenster in einer GUI. So ist es mit IrfanView zum Beispiel ein Leichtes, mittels drei Parametern beliebig viele Bilder zu laden, konvertieren und in einem anderen Format zu speichern.