1. Einführung

1.2 Funktionen

Hier nochmal unsere Funktion berechne_kuenftiges_guthaben:

berechne_kuenftiges_guthaben (startguthaben, zins, jahre) = startguthaben * (1 + zins/100)^jahre 

In der Mathematik verwendet man für Funktionen und Variable oft einzelne Buchstaben. Die obige Guthabenfunktion sähe vielleicht so aus:

\begin{align} g(x,z,j) = x \cdot \left(1 + \frac{z}{100}\right)^j \end{align}
Hier schon einmal der erste Ratschlag zum Programmierstil: verwenden Sie klingende Variablennamen. Also startguthaben statt x. Gewöhnen Sie sich das von Anfang an an. Sie werden im Berufsleben in Teams arbeiten, und da müssen andere Leute Ihren Code verstehen. Moderne Code-Editoren unterstützen automatische Vervollständigung (autocomplete), Sie sparen also mit kurzen Namen wie x, n, k kaum Zeit.

Eine Funktionsdefinition besteht immer aus drei Teilen:

  1. Der Funktionsname: berechne_kuenftiges_guthaben (startguthaben, zins, jahre) = startguthaben * (1 + zins/100)^jahre . Der legt einfach fest, unter welchem Namen die Funktion von nun an bekannt sein soll.
  2. Die Funktionsparameter: berechne_kuenftiges_guthaben (startguthaben, zins, jahre) = startguthaben * (1 + zins/100)^jahre. Das sind die Platzhalter oder Variablen.
  3. Der Funktionskörper: berechne_kuenftiges_guthaben (startguthaben, zins, jahre) = startguthaben * (1 + zins/100)^jahre. Dieser ist ein Ausdruck, in welchem die Parameter vorkommen.

Ein Funktionsaufruf ist ein Ausdruck wie \(g(3102.0, 5, 21)\) oder eben berechne_kuenftiges_guthaben (3102.0, 5, 21). Die Werte 3102.0, 5 und 21 sind die Argumente des Aufrufs. Es gibt genau so viele Argumente, wie die Funktion Parameter hat. Einen Funktionsaufruf auswerten heißt nun:

  1. Wir nehmen den Funktionskörper.
  2. Wir ersetzen im Körper jeden Parameter durch das entsprechende Argument, also startguthaben durch 3102.0, zins durch 5 und jahre durch 21.
Wir erhalten nun einen Ausdruck, der eventuell weiter ausgewertet werden kann.

Natürlich kann ein Ausdruck mehrere Funktionsaufrufe enthalten. Auch können im Körper einer Funktion wiederum Funktionsaufrufe drinstehen. Die folgende Übungsaufgabe hilft Ihnen, sich daran zu gewöhnen.

Übungsaufgabe Wir haben folgende Funktionsdefinition:
f(n) = n * (n+1) / 2
  1. Was sind Funktionsname, Funktionsparameter und Funktionskörper?

Werten Sie die folgenden Funktionsaufrufe aus. Wichtig ist nicht das korrekte Endergebnis, sondern dass Sie die einzelnen Schritte, insbesondere das Ersetzen der Parameter durch die Argumente, sorgfältig aufschreiben.

  1. f(10)
  2. f(3*5) * f(6)
  3. f( 2 * f(3) )

Es folgt eine weitere Funktionsdefinition:

p(x,y) = f(x+y) + x
  1. Wieviele Parameter hat die Funktion? Was ist der Funktionskörper?

Werten Sie aus:

  1. p(3,p(4,5))

Bitte beachten Sie, dass die obigen "Code-Beispiele" keine Beispiele in einer echten Programmiersprache sind. Ich will Ihnen einfach erst einmal das Konzept der Ausdrücke, des Auswertens, der Funktionsdefinitionen und -aufrufe auf dem Papier näherbringen. Wie man in einer Programmiersprache tatsächlcih Funktionen definiert (und anderes Zeug macht), sehen wir dann bald.