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