Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Minimallogo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

s n h m r u
i

Typangaben

Varianten der Kostenberechnung

Zur Berechnung der Kosten sind mehrere Varianten denkbar.

Variante A benutzt eine Funktionsdefinition.

kostenWandtattoos anzahl =
    anzahl * 12.99

Variante B benutzt eine Funktionsdefinition und eine Konstantendefinition.

kostenProWandtattoo =
    12.99

kostenWandtattoos anzahl =
    anzahl * kostenProWandtattoo

Variante C benutzt eine Funktionsdefinition mit mehreren Parametern.

kostenWandtattoos anzahl einzelpreis =
    anzahl * einzelpreis
Variante D benutzt eine Funktionsdefinition, die auf der Funktion anzahlWandtattoos aufbaut.
anzahlWandtattoos zimmerbreite zimmerhoehe kantenlaenge =
    floor (zimmerbreite / kantenlaenge) * floor (zimmerhoehe / kantenlaenge)

kostenWandtattoos zimmerbreite zimmerhoehe kantenlaenge einzelpreis =
    anzahlWandtattoos zimmerbreite zimmerhoehe kantenlaenge * einzelpreis

Aufgabe 1

Betrachte den Quelltext der Varianten und nenne deren Signatur. Überprüfe deine Vermutungen, indem du die Funktionen in der REPL eingibst. Vergleiche mit den Datentypen, die für die jeweiligen Parameter und Rückgabewerte im Kontext unseres Berechnungsproblems am sinnvollsten wären. (Beispiel: Welchen Datentyp sollte der Parameter anzahl am sinnvollsten besitzen? Entspricht das dem Datentyp, den Elm anhand der Funktionsdefinition ableitet?)

Explizite Typangaben

Die von Elm abgeleiteten Signaturen der Funktionen sind in den obigen Beispielen nicht optimal.

Die Anzahl der Wandtattoos sollte eine ganze Zahl, also vom Typ Int sein. Der Einzelpreis eines Wandtattoos sollte eine Kommazahl, also vom Typ Float sein. Elm kann natürlich nicht den jeweils sinnvollsten Dytentyp kennen, sondern nur anhand der Struktur von Ausdrücken wie a * 5, a * 5.1 oder a * round 5 auf den Typ von a schließen.

Man kann die Signatur einer Funktion, also die Datentypen der Paramater und Rückgabe, auch explizit angeben. Man kann dabei die von Elm abgeleitete Typangabe übernehmen, oder die Typangabe nach den eigenen Wünschen anpassen. Es kann passieren, dass man dann auch die Implementierung anpassen muss:

kostenProWandtattoo : Float
kostenProWandtattoo =
    12.99


kostenWandtattoos : Int -> Float
kostenWandtattoos anzahl =
    toFloat anzahl * kostenProWandtattoo

Es gilt als guter Stil die Typangaben explizit zu notieren, selbst wenn diese den automatisch abgeleiteten Typen entsprechen. Wir werden die explizite Angabe der Signatur an einigen Stellen verwenden, wenn sie das Verständnis förden, und an anderen Stellen weglassen, um die Beispiele kompakt zu halten.

Aufgabe 2

Erläutere am oben dargestellten Beispiel, welche Typangaben den von Elm abgeleiteten Typen entsprechen, welche angepasst wurden und inwiefern sich die Implementierung dadurch geändert hat.

Suche

v
8.2.2.2.1.1.4
www.inf-schule.de/deklarativ/fp_elm/elm_programme/funktionen/wandtattoo/lernstrecke/typangaben
www.inf-schule.de/8.2.2.2.1.1.4
www.inf-schule.de/@/page/hJneM1WM8dEAeKc7

Rückmeldung geben