i

Fachkonzept - Funktion

Funktion als Verarbeitungseinheit

Eine Funktion ist eine Verarbeitungseinheit, die übergebene Datenwerte verarbeitet und einen daraus berechneten Datenwert als Funktionswert zurückgibt. Bei Funktionen findet eine Übergabe von Daten, Verarbeitung von Daten und Rückgabe von Daten statt.

Als Beispiel betrachten wir eine Berechnungssituation beim Pyramidenbau. Wer eine Pyramide bauen will, sollte vorab den Materialbedarf an Steinen abschätzen. Das Volumen einer quadratischen Pyramide mit einer vorgegebenen Länge der Grundseite und einer vorgegebenen Höhe berechnet man mit folgender Formel:

$\begin{array}{lclcl} \text{Volumen} & = & \displaystyle\frac{1}{3} \cdot \text{Grundfläche} \cdot \text{Höhe} = & \displaystyle\frac{1}{3} \cdot \text{Länge} \cdot \text{Länge} \cdot \text{Höhe} \end{array}$

Funktion als Verarbeitungseinheit

Modellierung einer Funktion

Es ist hilfreich sich zuerst zu verdeutlichen welche Daten an die Funktion übergeben werden, und welche Rückgabe man erwartet:

Die Funktion volumenPyramide erhält als Eingabewerte:
- Länge der Grundseite [in m]: 230.3
- Höhe der Pyramide [in m]: 146.6
Die Rückgabe ist: 
- Volumen der Pyramide [in m3]: 2591794.66

Diese Beschreibung kann man dann knapp und informell zusammen mit Beispielaufrufen in einem Dokumentationskommentar festhalten.

{-| Berechnung des Volumens einer quadratischen Pyramide
anhand der Länge der Grundseite und der Höhe in Meter.
Die Rückgabe ist das Volumen der Pyramide in Kubikmetern.
    
    volumenPyramide 10.0 6.0 == 200.0
    volumenPyramide 230.3 146.6 == 2591794.66
-}

Anschließend legt man die Signatur, also die Datentypen der übergebenen und zurückgegebenen Daten fest.

volumenPyramide : Float -> Float -> Float

Die Schreibweise volumenPyramide : Float -> Float -> Float bedeutet, dass zwei Datenwerte vom Typ Float übergeben werden (das geht aus den ersten beiden Angaben hervor) und dass ein Datenwert ebenfalls vom Typ Float zurückgegeben wird (das wird durch die letzte Angabe beschrieben). Wir werden diese Schreibweise an geeigneter Stelle genauer erklären. Du kannst sie dir in Gedanken auch so vorstellen:

volumenPyramide : Float Float -> Float

Die übergebenen Daten nennt man Parameter. Um den Namen für die übergebenen Daten - z.B. laenge - von den übergebenen Datenwerten - z.B. 230.3 - zu unterscheiden, spricht man von den formalen Parametern laenge und hoehe und den aktuellen Parametern 230.3 und 146.6.

Verdeutlichen und zusammenfassen lässt sich dies alles in einem Black-Box-Diagramm mit Beispielwerten, Namen für die Parameter und Datentypen:

Black-Box-Diagramm

Definition einer Funktion

Die Verarbeitung der übergebenen Daten wird mit einer Funktionsdefinition festgelegt.

volumenPyramide laenge hoehe =
    (1 / 3) * (laenge * laenge) * hoehe

Zusammen mit dem Dokumentationskommentar und der Signatur ergibt sich die vollständige Funktionsdefinition:

{-| Berechnung des Volumens einer quadratischen Pyramide
anhand der Länge der Grundseite und der Höhe in Meter.
Die Rückgabe ist das Volumen der Pyramide in Kubikmetern.

    volumenPyramide 10.0 6.0 == 200.0
    volumenPyramide 230.3 146.6 == 2591794.66

-}
volumenPyramide : Float -> Float -> Float
volumenPyramide laenge hoehe =
    (1 / 3) * (laenge * laenge) * hoehe

Dabei ist zu beachten:

  • Funktionsnamen müssen in Elm klein geschrieben werden.
  • Die Angabe eines Dokumentationskommentars ist optional, aber empfehlenswert und beim Veröffentlichen von Modulen über das Elm Package Repository unter package.elm-lang.org verpflichtend.
  • Die Angabe der Signatur ist optional, aber empfehlenswert.
  • Parameter werden in Elm ohne Klammern direkt hinter dem Funktionsnamen aufgelistet.
  • Der Ausdruck zur Berechnung des Funktionswertes wird entweder direkt hinter das Gleichheitszeichen geschrieben oder - wie oben zu sehen - eingerückt (in der Regel um 4 Einheiten) in der nächsten Zeile.
Definition einer Funktion

Wenn du bereits Programmiererfahrung hast, dann beachte auch, dass die Verarbeitung nicht mit Anweisungen beschrieben wird, die Schritt für Schritt ausgeführt werden sollen. Mit einem Ausdruck wird vielmehr das zu berechnende Ergebnis beschrieben. Wir werden diese Sichtweise in den folgenden Kapiteln weiter vertiefen.

Aufruf einer Funktion

Mit einem Funktionsaufruf wird die Funktion als Verarbeitungseinheit aktiviert. Die im Aufruf übergebenen aktuellen Parameter werden benutzt, um den Wert des Ausdrucks zu berechnen. Dieser Wert wird zurückgegeben. Bei Verwendung in der REPL wird zusätzlich noch der Typ des Ergebnisses ausgegeben.

> volumenPyramide 10.0 6.0
199.99999999999997 : Float
> volumenPyramide 230.3 145.6
2574115.3013333334 : Float
Definition und Aufruf einer Funktion

Funktionale Programmierung

Das hier präsentierte Beispiel verdeutlich bereits die Grundidee der funktionalen Programmierung.

Beim Lösen eines Datenverarbeitungsproblems werden (meist mehrere) Funktionen als Verarbeitungseinheiten konzipiert. Die zugehörigen Funktionsdefinitionen bilden dann ein funktionales Programm, das mit Hilfe eines Funktionsaufrufes aktiviert werden kann.

Im Beispiel ist das funktionale Programm sehr einfach gestrickt. In den folgenden Kapiteln werden wir Schritt für Schritt immer komplexere Verarbeitungssituation mit dann auch komplexeren funktionalen Programmen bearbeiten.

Suche

v
8.2.2.2.3 Fachkonzept - Funktion
Kopieren durch Anklicken

Rückmeldung geben