Fachkonzept - Datensatz als Record
Einen Record bilden
Wenn man mehrere Daten zusammen verwalten möchte, dann kann man aus ihnen einen Datensatz bilden. Die Daten eines Datensatzes werden dabei mit Hilfe von Attributen verwaltet. Jedem Attribut wird ein Datenwert zugewiesen.
In Elm werden Datensätze mit Hilfe von Records dargestellt. Die Abbildung verdeutlicht (an einem geschachtelten Datensatz) den Aufbau eines Records.
Hier ein Implementierung mit einer Alias-Typdefinition und einem Aufruf in der REPL zu diesem Record.
module Mailadressen exposing (..)
-- Definition eines Alias ist oft hilfreich, aber nicht zwingend notwendig
type alias Person =
{ vorname: String
, nachname: String
, geburtsdatum:
{ tag: Int
, monat: Int
, jahr: Int
}
}
person1: Person
person1 =
{ vorname = "Anuk"
, nachname = "Franck"
, geburtsdatum =
{ tag = 6
, monat = 6
, jahr = 2006
}
}
> import Mailadressen exposing (..)
> person1
{ geburtsdatum = { jahr = 2006, monat = 6, tag = 6 }, nachname = "Franck", vorname = "Anuk" }
: Person
Auf die Attributwerte eines Records zugreifen
Der Zugriff erfolgt mit Hilfe der Punkt-Notation.
> import Mailadressen exposing (..)
> person1.vorname
"Anuk" : String
> person1.geburtsdatum
{ jahr = 2006, monat = 6, tag = 6 }
: { jahr : Int, monat : Int, tag : Int }
> person1.geburtsdatum.jahr
2006 : Int
Der Zugriff auf Attributwerte kann auch mit Hilfe von - passend zum Record gebildeten - Zugriffsfunktionen erfolgen.
> import Mailadressen exposing (..)
> .vorname person1
"Anuk" : String
> .jahr (.geburtsdatum person1)
2006 : Int
Mustererkennung verwenden
Bei der Verarbeitung von Records ist es oft günstig, den Record mit einem Muster bestehend aus Attributen des Records zu dekonstruieren.
module Mailadressen exposing (..)
type alias Person =
{ vorname: String
, nachname: String
}
mailadresse: Person -> String
mailadresse datensatz =
let
{ vorname, nachname } = datensatz
in
vorname ++ "." ++ nachname ++ "@meine-schule.de"
Kurz und sehr übersichtlich wird eine Funktionsdefinition, wenn man das Muster direkt als Parameter benutzt.
module Mailadressen exposing (..)
...
mailadresse { vorname, nachname } =
vorname ++ "." ++ nachname ++ "@meine-schule.de"