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);
- 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ßtMathHelper
. - 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. static int summiereDrei(int a, int b, int c)
ist der Methodenkopf. Hier steht, welchen Typ das Ergebnis unserer Funktion (auch: Rückgabewert) hat…- …außerdem der Name der Funktion und…
- …welche Argumente die Funktion entgegennimmt.
- Hier ist der Rückgabetyp
int
, der Name der FunktionsummiereDrei
, und es werden drei Argumente vom Typint
entgegengenommen, die innerhalb der Funktion dann alsa
,b
undc
verfügbar sein werden. - Der Block, der dem Methodenkopf folgt ist von geschweiften Klammern (
{
und}
) eingeschlossen und wird Methodenrumpf genannt. - Die Übergabewerte dieser Argumente sind innerhalb des Methodenrumpfs als Parameter der Funktion verfügbar. (Hier also
a
,b
undc
– Puuh!) summe
(innerhalb des Methodenrumpfs) ist eine lokale Variable. Sie existiert nur innerhalb des Methodenrumpfs!- Deshalb können wir in unserem eigentlichen Programm eine Variable
summe
nennen, ohne Verwechslungen befürchten zu müssen. - (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.)
return
ist das Schlüsselwort, mit der die Funktion verlassen wird. der Ausdruck, der hinterreturn
steht, wird als Rückgabewert zurückgegeben.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.)- Im eigentlichen Programm wird die Funktion erst ausgeführt, wenn sie aufgerufen wird.
- In der Zeile
int summe = MathHelper.summiereDrei(1, 1, 2);
erstellen wir einen neue Variablesumme
und weisen dieser den Rückgabewert unserer selbstgeschriebenen Funktion zu. - Hier wird die Funktion mit den Argumenten
1
,1
, und2
aufgerufen, und liefert den Wert4
zurück. - Die Funktion lässt sich beliebig oft aufrufen – so lassen sich viele Zeilen Code sparen!
- Ü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)
- In Python lassen sich mit dem Schlüsselwort
def
eigene Funktionen definieren. - 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.)
def summiere_drei(a: int, b: int, c: int) -> int:
ist der Methodenkopf. Hier steht der Name der Funktion…- …welche Argumente die Funktion entgegennimmt und…
- …welchen Typ das Ergebnis unserer Funktion (auch: Rückgabewert) hat…
- Hier ist der Rückgabetyp
int
, der Name der FunktionsummiereDrei
, und es werden drei Argumente vom Typint
entgegengenommen, die innerhalb der Funktion dann alsa
,b
undc
verfügbar sein werden. - Der Block, der dem Methodenkopf folgt, wird eingerückt und Methodenrumpf genannt.
- Die Übergabewerte dieser Argumente sind innerhalb des Methodenrumpfs als Parameter der Funktion verfügbar. (Hier also
a
,b
undc
– Puuh!) summe
(innerhalb des Methodenrumpfs) ist eine lokale Variable. Sie existiert nur innerhalb des Methodenrumpfs!- Deshalb können wir in unserem eigentlichen Programm eine Variable
summe
nennen, ohne Verwechslungen befürchten zu müssen. - (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.)
return
ist das Schlüsselwort, mit der die Funktion verlassen wird. der Ausdruck, der hinterreturn
steht, wird als Rückgabewert zurückgegeben.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.)- Im eigentlichen Programm wird die Funktion erst ausgeführt, wenn sie aufgerufen wird.
- In der Zeile
summe = summiere_drei(1, 1, 2)
erstellen wir einen neue Variablesumme
und weisen dieser den Rückgabewert unserer selbstgeschriebenen Funktion zu. - Hier wird die Funktion mit den Argumenten
1
,1
, und2
aufgerufen, und liefert den Wert4
zurück. - Die Funktion lässt sich beliebig oft aufrufen – so lassen sich viele Zeilen Code sparen!
- Ü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
return
eingesetzt?return
beendet die Funktion und gibt den Ausdruck, der ihm folgt, an den aufrufenden Prozess zurück.int summe(int a, int b)
. Schreibe einen Methodenaufruf, übergib als Argumente die Zahlen 3 und 9. Welchen Rückgabewert erwartest du?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.