WikiDer > Rufen Sie mit der Referenz an

Call-by-reference

Call-by-Referenz ist ein Mechanismus in Programmiersprachen zu Parameter (und implizit auch Funktionen) zu übergeben an Verfahren.

Wie ein Variable wird beim Aufruf einer Prozedur namentlich angegeben, dann wird bei der Ausführung des Programms die Adresse dieser Variablen. Ändert den Namen der Variablen zur Laufzeit, zum Beispiel weil sie a . hat Array-Element deren Index durch das Verfahren selbst angepasst wird, die Adresse des Call-by-Name Parameter.

Das ist der Unterschied dazu Call-by-Referenz Mechanismus. Dort wird auch die Adresse der Variablen angegeben, die aber von der Prozedur nicht mehr angepasst wird.

Call-by-Name ist Teil der Programmiersprache Algol-60 und wird auch verwendet in Burroughs erweiterter Algol und Varianten davon, wie ESPOL und NEWP. In Algol-60 besteht die Wahl für die Parameter der Verfahren zwischen Call-by-Value und Call-by-Name. Ebenfalls Simula unterstützt unterstützt Call-by-Name.

Obwohl Call-by-Name elegante Programmierlösungen wie die Jensen-Gerät, seine Verwendung ist aus dem Quellcode des Programms nicht direkt ersichtlich. Kommentar im Programm selbst ist unabdingbar. Die Erklärungen wie in den Erläuterungen zu den Jensen-Gerät tragen auch zu Unklarheiten bei. Das Quellcode das Beispiel in Wikipedia legt überhaupt nicht nahe, dass eine Summe aller Elemente in einem Vektor berechnet wird. Der ahnungslose Beobachter würde eher zu dem Schluss kommen, dass es eine umständliche Art der Vermehrung gibt. weil Call-by-Name gewisse subtile Fehler erleichtert und die Umsetzung von Call-by-Name relativ ineffizient, es gibt noch sehr wenige Programmiersprachen, die Call-by-Name Unterstützung.

Die syntaktische Korrektheit ist immer überprüfbar durch die Compiler. Zum Zeitpunkt des Aufrufs der Prozedur ist der Typ des aktuellen Parameters bekannt und auch seine Abhängigkeit von anderen Parametern.

Beispiel

mitSystem;NamensraumWikipedia{KlasseProgramm{statischLeereMain(Schnur[]args){intX=10;Konsole.WriteLine("Wert von x für Methodenaufruf: {0}",X};// Variable x wird hier als Referenz auf die Methode bereitgestelltMultiplizieren(refX);Konsole.WriteLine("Wert von x nach Methodenaufruf: {0}",X);}ÖffentlichkeitstatischLeereMultiplizieren(refintein){ein*=ein;Konsole.WriteLine("Wert von x innerhalb der Methode: {0}",ein);}}}

Das Ergebnis des Programms wird sein:

Wert von x vor Methodenaufruf: 10Wert von x innerhalb der Methode: 100Wert von x nach Methodenaufruf: 100