07 Funktionen

Zeilen sparen mit Funktionen #

class MathHelper {
   
   static int summiereDrei(int a, int b, int c) {
      int summe = a + b + c;
      return summe;
   }

}

// eigentliches Programm
int summe = MathHelper.summiereDrei(1, 1, 2);
println(summe);
int summe2 = MathHelper.summiereDrei(3, 5, 8);
println(summe2);
  1. In Java müssen Funktionen (später werden wir sie Methoden nennen) in Klassen (class) geschrieben werden – das hat mit Javas Objektorientierung zu tun. Unsere Hilfsklasse heißt MathHelper.
  2. Weil uns hier Objekte noch nicht beschäftigen sollen, schreiben wir vor unsere Funktion static – so müssen wir kein Objekt erzeugen, und können die Funktion trotzdem nutzen.
  3. static int summiereDrei(int a, int b, int c) ist der Methodenkopf. Hier steht, welchen Typ das Ergebnis unserer Funktion (auch: Rückgabewert) hat…
  4. …außerdem der Name der Funktion und…
  5. …welche Argumente die Funktion entgegennimmt.
  6. Hier ist der Rückgabetyp int, der Name der Funktion summiereDrei, und es werden drei Argumente vom Typ int entgegengenommen, die innerhalb der Funktion dann als a, b und c verfügbar sein werden.
  7. Der Block, der dem Methodenkopf folgt ist von geschweiften Klammern ({ und }) eingeschlossen und wird Methodenrumpf genannt.
  8. Die Übergabewerte dieser Argumente sind innerhalb des Methodenrumpfs als Parameter der Funktion verfügbar. (Hier also a, b und c – Puuh!)
  9. summe (innerhalb des Methodenrumpfs) ist eine lokale Variable. Sie existiert nur innerhalb des Methodenrumpfs!
  10. Deshalb können wir in unserem eigentlichen Programm eine Variable summe nennen, ohne Verwechslungen befürchten zu müssen.
  11. (Unter bestimmten Umständen können wir aber auf Variablen von außerhalb der Funktion zugreifen. Allerdings wird ein solches auf globalen Variablen beruhendes Programmieren als schlechter Stil angesehen.)
  12. return ist das Schlüsselwort, mit der die Funktion verlassen wird. der Ausdruck, der hinter return steht, wird als Rückgabewert zurückgegeben.
  13. return steht meist am Ende der Funktion, kann aber auch schon innerhalb der Funktion auftauchen – dann wird die Funktion vorzeitig verlassen. (Sinnvoll ist das z.B. innerhalb von Fallunterscheidungen.)
  14. Im eigentlichen Programm wird die Funktion erst ausgeführt, wenn sie aufgerufen wird.
  15. In der Zeile int summe = MathHelper.summiereDrei(1, 1, 2); erstellen wir einen neue Variable summe und weisen dieser den Rückgabewert unserer selbstgeschriebenen Funktion zu.
  16. Hier wird die Funktion mit den Argumenten 1, 1, und 2 aufgerufen, und liefert den Wert 4 zurück.
  17. Die Funktion lässt sich beliebig oft aufrufen – so lassen sich viele Zeilen Code sparen!
  18. Üblicherweise beginnen Namen von Funktionen mit einem Kleinbuchstaben und werden in Java in der CamelCase-Schreibweise geschrieben.
def summiere_drei(a: int, b: int, c: int) -> int:
    summe = a + b + c
    return summe

# eigentliches Programm
summe = summiere_drei(1, 1, 2)
print(summe)
summe2 = summiere_drei(3, 5, 8)
print(summe2)
  1. In Python lassen sich mit dem Schlüsselwort def eigene Funktionen definieren.
  2. In der objektorientierten Programmierung, mit der wir uns später befassen werden, werden Funktionen auch Methoden genannt. (Daher ist hier an vielen Stellen auch von Methoden die Rede.)
  3. def summiere_drei(a: int, b: int, c: int) -> int: ist der Methodenkopf. Hier steht der Name der Funktion
  4. …welche Argumente die Funktion entgegennimmt und…
  5. welchen Typ das Ergebnis unserer Funktion (auch: Rückgabewert) hat…
  6. Hier ist der Rückgabetyp int, der Name der Funktion summiereDrei, und es werden drei Argumente vom Typ int entgegengenommen, die innerhalb der Funktion dann als a, b und c verfügbar sein werden.
  7. Der Block, der dem Methodenkopf folgt, wird eingerückt und Methodenrumpf genannt.
  8. Die Übergabewerte dieser Argumente sind innerhalb des Methodenrumpfs als Parameter der Funktion verfügbar. (Hier also a, b und c – Puuh!)
  9. summe (innerhalb des Methodenrumpfs) ist eine lokale Variable. Sie existiert nur innerhalb des Methodenrumpfs!
  10. Deshalb können wir in unserem eigentlichen Programm eine Variable summe nennen, ohne Verwechslungen befürchten zu müssen.
  11. (Unter bestimmten Umständen können wir aber auf Variablen von außerhalb der Funktion zugreifen. Allerdings wird ein solches auf globalen Variablen beruhendes Programmieren als schlechter Stil angesehen.)
  12. return ist das Schlüsselwort, mit der die Funktion verlassen wird. der Ausdruck, der hinter return steht, wird als Rückgabewert zurückgegeben.
  13. return steht meist am Ende der Funktion, kann aber auch schon innerhalb der Funktion auftauchen – dann wird die Funktion vorzeitig verlassen. (Sinnvoll ist das z.B. innerhalb von Fallunterscheidungen.)
  14. Im eigentlichen Programm wird die Funktion erst ausgeführt, wenn sie aufgerufen wird.
  15. In der Zeile summe = summiere_drei(1, 1, 2) erstellen wir einen neue Variable summe und weisen dieser den Rückgabewert unserer selbstgeschriebenen Funktion zu.
  16. Hier wird die Funktion mit den Argumenten 1, 1, und 2 aufgerufen, und liefert den Wert 4 zurück.
  17. Die Funktion lässt sich beliebig oft aufrufen – so lassen sich viele Zeilen Code sparen!
  18. Üblicherweise beginnen Namen von Funktionen mit einem Kleinbuchstaben und werden in Python in der snake_case-Schreibweise geschrieben.

Aufgabe: Zahlen quadrieren #

Schreibe eine Funktion, die eine Zahl entgegennimmt und ihr Quadrat zurückgibt. (Wird die Funktion z.B. mit 3 aufgerufen, soll also 9 zurückgegeben werden, wird sie mit 5 aufgerufen, soll 25 zurückgegeben werden.

Aufgabe: beliebige Potenzen #

Schreibe eine Funktion, die beliebige Potenzen berechnen kann. Die Funktion soll zwei (ganze) Zahlen entgegennehmen, und die erste hoch die zweite zurückgeben. Wird die Funktion z.B. mit 2 und 3 aufgerufen, soll 8 zurückgegeben werden, wird sie mit 5 und 2 aufgerufen, soll 25 zurückgegeben werden, und wird sie mit 2 und 5 aufgerufen, wird 32 zurückgegeben.

Tipp: Verwende eine while-Wiederholung, um die Zahl oft genug mit sich selbst malzunehmnen!

Für Profis: Schaffst du es, wenn 0 als Potenz übergeben wird, korrekterweise 1 zurückzugeben?

Aufgabe: Vielfaches #

Schreibe eine Funktion, die zwei natürliche Zahlen entgegennimmt und einen Wahrheitswert zurückgibt, je nachdem, ob die erste Zahl ein Vielfaches der zweiten Zahl ist.

Aufgabe: ja oder nein? #

Programmiere eine Funktion, die so lange »ja oder nein?« fragt, bis eine der Antworten eingegeben wurde. Je nach Antwort soll der entsprechende Wahrheitswert zurückgegeben werden.

Aufgabe: Jugendschutzgesetz #

Schreibe eine Funktion, die ein Alter (als Zahl) entgegennimmt und eine Uhrzeit (z.B. als Zeichenkette) zurückgibt, bis zu der die Person auf einem öffentlichen Fest bleiben darf.

Flashcards #

Beschrifte folgenden Methodenkopf mit Fachbegriffen:

boolean istVielfachesVon(int gefragt, int zahl)
boolean     istVielfachesVon  (int gefragt,   int zahl      )
Rückgabetyp Name der Funktion  Typ Parameter1 Typ Parameter2

Beschrifte folgenden Methodenkopf mit Fachbegriffen:

def istVielfachesVon(gefragt: int, zahl: int) -> int:
def                 istVielfachesVon(gefragt:    int, zahl:      int) -> int:
Funktionsdefinition Name der Funktion Parameter1 Typ  Parameter2 Typ     Rückgabetyp
Was ist der Unterschied zwischen einem Argument und einem Parameter?
Eine Funktion wird mit Argumenten aufgerufen. Innerhalb der Funktion sind diese Argumente als Parameter ansprechbar.
Wie wird das Schlüsselwort return eingesetzt?
return beendet die Funktion und gibt den Ausdruck, der ihm folgt, an den aufrufenden Prozess zurück.
Nimm an, du hast eine Funktion int summe(int a, int b). Schreibe einen Methodenaufruf, übergib als Argumente die Zahlen 3 und 9. Welchen Rückgabewert erwartest du?
Nimm an, du hast eine Funktion summe(a: int, b: int) -> int. Schreibe einen Methodenaufruf, übergib als Argumente die Zahlen 3 und 9. Welchen Rückgabewert erwartest du?
summe(3, 9)

Hier kommt vermutlich 12 heraus.