Fachkonzept - Datensatz als Tupel
Ein Tupel bilden
Ein Datentupel fasst mehrere Daten zu einer Einheit zusammen. Die Daten werden dabei in einer vorgegebenen Reihenfolge aufgeführt.
Tupel werden oft in Situationen benutzt (wie Datumsangaben oder Positionsangaben), in denen es fest vorgegebene Vereinarungen über das Format und die Reihenfolge der Daten gibt. Im Zweifel sollte man eher Records verwenden, da hier weniger Fehler auftreten können und sie flexibler in der Verwendung sind.
Die Abbildung verdeutlicht, wie ein Tupel in Elm dargestellt wird. Beachte, dass in Elm nur Tupel mit 2 oder 3 Datenwerten möglich sind.
Hier ein Aufruf in der REPL zu diesem Tupel.
> datum = (3, 3, 2023)
(3,3,2023) : ( number, number1, number2 )
Die einzelnen Elemente eines Tupels können beliebige - auch unterschiedliche und komplexe - Datentypen besitzen.
person =
( { vorname = "Anuk"
, nachname = "Franck"
}
, { tag = 6
, monat = 4
, jahr = 2015
}
, True
)
Auf die Datenwerte eines Tupels zugreifen
Ein Zugriff mit Zugriffsfunktionen ist nur für Tupel mit 2 Datenwerten möglich.
> uhrzeit = (12, 44)
> Tuple.first uhrzeit
15 : number
> Tuple.second uhrzeit
35 : number1
Mustererkennung verwenden
Bei der Verarbeitung von Tupeln ist es meist sinnvoll, das Tupel mit einem Muster zu dekonstruieren.
type alias Datum = (Int, Int, Int)
datum = (3, 3, 2023)
textAusgabe: Datum -> String
textAusgabe tupeldatum =
let
( tag, monat, jahr ) = tupeldatum
in
"Datum: "
++ (String.fromInt tag) ++ "."
++ (String.fromInt monat) ++ "."
++ (String.fromInt jahr)
> textAusgabe datum
"Datum: 3.3.2023" : String
Kurz und sehr übersichtlich wird eine Funktionsdefinition, wenn man das Muster direkt als Parameter benutzt.
...
textAusgabe ( tag, monat, jahr ) =
"Datum: "
++ (String.fromInt tag) ++ "."
++ (String.fromInt monat) ++ "."
++ (String.fromInt jahr)