Wiki: Mathe und Info

Unterrichtsmaterialien für Mathematik und Informatik

Benutzer-Werkzeuge

Webseiten-Werkzeuge


info:sek-ii:e2:java-grundlagen:fk-funktion-return-void-parameter

Fachkonzepte: Funktion, Return, Void & Parameter

Funktion

Die Boolschen Funktionen habt ihr schon kennengelernt. Sie sind ein Spezialfall von Funktionen. Allgemein können Funktionen nicht nur den Datentyp boolean als Rückgabewert haben, sondern auch jeden anderen Datentyp. Betrachtet als Beispiel die folgenden Funktionen. Die Funktion mauerDa() kennt ihr bereits. Sie überprüft, ob der Hamster vor einer Mauer steht oder nicht, hat also einen Wahrheitswert als Rückgabetyp. Die zweite Funktion wieAltIstDerHamster() hat im Gegensatz hierzu einen Integer, also eine ganze Zahl als Rückgabewert. Dementsprechend ist auch das return-Statement angepasst worden und gibt eine Zahl zurück.

boolsche Funktion (bereits bekannt):
boolean mauerDa() {
  return !vornFrei();
}
int-Funktion (neu):
int wieAltIstDerHamster() {
  return 5;
}

Das ist ja toll, und was bringt uns das? So, wie es jetzt ist, noch nicht all zu viel. Kombiniert man aber die int-Funktion mit Variablen und einer while-Schleife, lässt sich folgendes programmieren. Die Funktion vorBisWand() kennt ihr schon. Sie lässt den Hamster vorwärts an die nächste Wand laufen. Was wäre nun, wenn der Hamster auch noch zählen könnte, wie weit er gegangen ist? Die Funktion vorBisWandUndZaehle() macht genau das, indem sie eine Variable verwendet, aber man kann mit dem Ergebnis noch nichts anfangen, da es nur innerhalb der Funktion existiert. Erst die Funktion zaehleSchrittebisZurMauer() macht das, sie den Datentyp int als Rückgabewert und liefert so das Ergebnis zurück!

void vorBisWand() {
  while (vornFrei()) {
    vor();
  }
}
void vorBisWandUndZaehle() {
  int schritte = 0;
 
  while (vornFrei()) {
    vor();
    schritte = schritte + 1;
  }
}
int zaehleSchrittebisZurMauer() {
  int schritte = 0;
 
  while (vornFrei()) {
    vor();
    schritte = schritte + 1;
  }
 
  return schritte;
}

Achtung! Die Funktion zaehleSchrittebisZurMauer() hat einen Seiteneffekt! Sie verändert den Zustand des Hamsters! Die Konvention, Seiteneffekte zur vermeiden gilt auch hier, es sei denn, man macht darauf aufmerksam, z.B. durch die Benennung der Funktion. Beim Namen vorBisWand() ist klar, dass sie einen Seiteneffekt erzeugt, bei zaehleSchrittebisZurMauer() allerdings nicht. Ein besserer Name wäre also z.B. vorBisWandUndZaehleSchritte()!

Somit lässt sich die Definition einer Methode nun auf das folgende Syntax-Diagramm zusammenfassen:

Return & Void

Auffallend ist, dass hiermit auch die Aktionsbefehle des Hamsters abgedeckt werden, wenn man annimmt, dass void ein Datentyp ist. Und genau das wird auch angenommen - void ist sozusagen ein Platzhalter für "kein Datentyp" - die Funktion gibt keinen Wert (also "leer", engl.: "void") zurück. Da diese Funktionen nichts zurückgeben, benötigen sie auch kein return-Statement.

Parameter

Funktionen können, wie im Syntax-Diagramm zu sehen, auch Parameter haben, die ihr Verhalten beeinflussen. Stellt euch folgende Situation vor: Wir wollen eine Funktion programmieren, die den Hamster vier Schritte vor gehen lässt. Einfach, denkt ihr? Richtig!

void vierVor() {
  vor();
  vor();
  vor();
  vor();
}

Was, wenn wir nun aber 20 Schritte vor gehen wollen? Immer noch leicht? Klar, einfach nur das vor() 20 mal wiederholen! Wird zwar ziemlich lange, aber was solls! Naja, es geht auch kürzer, indem man Variablen und eine While-Schleife verwendet:

void zwanzigVor() {
  int schritte = 0;
 
  while (schritte < 20) {
    vor();
    schritte = schritte + 1;
  }
}

Okay, klingt immer noch einfach, oder? Was aber, wenn wir nun 15 Schritte gehen wollen? Oder 16? Oder 42? Oder 100? Jedes mal eine neue Funktion schreiben? fuenfzehnVor(), sechzehnVor(), …, hundertVor()?

Könnte man das nicht irgendwie einfacher formulieren, z.B. so: nVor(15), nVor(16), …, nVor(100)? Kurze Antwort: Ja, kann man. Das nennt man Funktionsparameter:

void nVor(int anzahl) {
  int schritte = 0;
 
  while (schritte < anzahl) {
    vor();
    schritte = schritte + 1;
  }
}

Die Funktion nVor() hat einen Parameter, nämlich die Variable anzahl. Diese beeinflusst das Verhalten der Funktion, nämlich wie viele Schritte der Hamster vor geht.

info/sek-ii/e2/java-grundlagen/fk-funktion-return-void-parameter.txt · Zuletzt geändert: 2020-08-14 20:15 von christian.weber