Parameter (Informatik)
Ein Parameter ist in der Informatik ein Argument in einem Unterprogramm oder Makro. Man unterscheidet Formale und Aktuelle Parameter.
| Inhaltsverzeichnis |
Formaler Parameter
Die formalen Parameter werden bei der Deklaration eines Unterprogrammes in einer Programmiersprache normalerweise als Argumente hinter dem definierenden Funktionsnamen angegeben werden. Damit ist es möglich die Funktionsvorschrift so anzugeben, dass nicht bekannt sein muß, mit welchen konkreten Werten gerechnet werden soll. Oft erfordert die Angabe eines formalen Parameters nur die Angabe des verwendeten Datentyps.
Beispiel: Unterprogrammdeklaration in einer fiktiven Programmiersprache 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 aktuellen Parameter.
Aktueller Parameter
Während des tatsächlichen Funktionsaufruf werden durch die Parameterübergabe die aktuellen Parameter an die Funktion übergeben und ersetzen bei der Ausführung die formalen durch die aktuellen Parameter. 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 aktuellen Parametern
r1:=Radius(x1,y1); -- aktuelle Parameter x:=x1 und y:=y1 Durchmesser:=2*Radius(13,-2); -- aktuelle Parameter x:=13 und y:=-2
Parameterübergabe
Es gibt unterschiedliche Methoden, wie die formalen Parameter während der Parameterübergabe durch die aktuellen Parameter ersetzt werden:
- Bei Wertparametern (call by value) wird der Wert eines Ausdrucks berechnet und gegebenenfalls eine Kopie des Ergebnisses erzeugt. Dieses wird an Stelle des formalen Parameters verwendet. Die aktuellen Parameter können beliebige Ausdrücke wie 2*X+1, sin(x) sein. Etwaige Änderungen der Parameter im Unterprogramm werden nur in der Kopie durchgeführt und gehen bei Abschluss des Unterprogramms verloren. Große Datenstrukturen wie Felder werden bei der Übergabe kopiert, was unerwünscht sein kann.
- Referenzparameter (call by reference) übergeben eine Referenz (normalerweise die Speicheradresse) des aktuellen Parameters. Dies ist in der Regel sehr schnell. Änderungen bleiben auch nach Abschlusse des Unterprogramms wirksam. Aktuelle Parameter können nur Ausdrücke sein, deren Adresse berechnet werden kann, also z.B. keine Konstanten.
- Namensparameter (call by name) setzen den aktuellen Wert des Parameters an Stelle des formalen Parameters während der Ausführung ein. Dies kann auch mehrfach geschehen. Zusammen mit dem aktuellen Parameter wird eine Umgebung übergeben, welche die Bindungen der freien Variablen, welche im aktuellen Parameter vorkommen, angibt. Der Unterschied zu Wertparametern ist, dass der Ausdruck erst dann berechnet wird, wenn der Wert in der aufgerufenen Funktion gebraucht wird.
- Wertergebnisparameter (call by value/return) erzeugen wie Wertparameter beim Aufruf zunächst eine Kopie des aktuellen Parameters. Bei Unterprogrammende wird der Inhalt des Parameters jedoch zurückgeschrieben. Dieser Parameterübergabemechanismus kann bei nebenläufigen Programmen eine andere Wirkung als die Verwendung von Referenzparametern haben, da während der Ausführungszeit des Unterprogramms ein anderer Thread auf die Variable in der aufrufenden Prozedur zugreifen kann.
- In einem Makro wird der formale Parameter textuell durch den aktuellen Parameter ersetzt. Der Unterschied zu Namensparametern besteht darin, dass Namenskonflikte in Kauf genommen werden. Kommt in einem aktuellen Parameter eine Variable vor, welche den gleichen Namen wie eine lokale Variable besitzt, so wird bei der Makroexpansion die lokale Variable verwendet.
- Call-by-Need ist eine Variante von Namensparametern, bei der jeder übergebene aktuelle Parameter maximal einmal ausgewertet wird. Wird ein aktueller Parameter ausgewertet, so werden alle Vorkommen des formalen Parameters durch den erhaltenen Wert (oder einen Zeiger auf eine Speicheradresse mit diesem Wert) ersetzt. In Haskell ist call-by-need Teil der Lazy Evaluation.
Moderne, prozedurale Programmiersprachen unterstützen in der Regel Wertparameter und Referenzparameter, manchmal auch Wertergebnisparameter.
Befehlszeilenparameter
Zudem besteht bei allen 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. Je nach dem, welches Programm verwendet wird, werden Parameter mit anderen Zeichen voneinander abgegrenzt (üblicherwiese "-" oder "/"). Zudem haben je nach Programm gleiche Parameter unterschiedliche Auswirkungen. Dass, wie im Beispiel, mehrere unterschiedliche Trennzeichen verwendet werden, ist unüblich und dient nur der Demonstration.
Allgemein kann man sagen, dass man bei der Verwendung von Befehlszeilenparametern oft schneller zu Ergebnissen kommt. 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. Wenn man dies häufiger macht, kann man sich dafür eine Verknüpfung anlegen.
