Java Reference
In-Depth Information
Java) lediglich Werte übergeben, keine Variablen selbst. Man nennt diesen Parameterübergabeme-
chanismus deshalb auch call-by-value-Parameterübergabe . In anderen Programmiersprachen gibt
es andere Formen der Parameterübergabe. Beim call-by-reference werden bspw. Speicheradressen
von Variablen übergeben, sodass der Wert einer als aktueller Parameter übergebenen Variablen in-
nerhalb des Funktionsrumpfes verändert werden kann. Das ist in der Hamster-Sprache (und in Java)
nicht möglich, hier existiert ausschließlich die call-by-value-Parameterübergabe, weshalb die weite-
ren Mechanismen an dieser Stelle auch nicht weiter vertieft werden sollen.
Im obigen Beispiel wird die Funktion felderVor in der main-Prozedur auch noch ein viertes Mal
aufgerufen. Lassen Sie sich nicht dadurch verwirren, dass hier der aktuelle und der formale Para-
meter dieselben Namen haben. Es existieren zwei verschiedene Variablen, allerdings mit demselben
Namen. Eine ist lokal zur Prozedur main , die andere lokal zur Funktion felderVor . Übergeben wird
nur der aktuelle Wert der zu main lokalen Variablen anzahl (hier 4 ), mit der die zu felderVor lo-
kale Variable anzahl initialisiert wird. Insbesondere hat die Manipulation der Variablen anzahl im
Schleifenrumpf innerhalb der Funktion felderVor keinen Einfluss auf die lokale Variable anzahl
der main-Prozedur, d.h. nach Verlassen der Prozedur felderVor speichert die Variable anzahl der
main-Prozedur immer noch den Wert 4 .
16.2.4.3 Weitere Beispiele
Das folgende Beispiel enthält syntaktische Fehler:
/*
* drehe dich linksum, falls der Wert true uebergeben wird,
* ansonsten drehe dich rechtsum
*/
void drehen(boolean richtung) {
if (richtung) {
linksUm();
} else {
linksUm();
linksUm();
linksUm();
}
}
/*
* falls als erster Wert false uebergeben wird, laufe falls
* moeglich änzahl" Felder nach hinten, ansonsten laufe
* falls moeglich änzahl" Felder nach vorne;
* liefere die Anzahl an tatsaechlich gelaufenen Feldern
* als Funktionswert
*/
int felderVor (boolean richtung, int anzahl) {
int schritte = 0;
if (!richtung) {
linksUm();
linksUm();
}
Search WWH ::




Custom Search