OCaml Konzepte: Grundlegende Konzepte - Produktypen |
Produkttyp |
|
|
Record | Benannte Sammlung von Werten beliebigen Typs ! |
Produkttypen (n-Tupel) wie auch Records dienen dazu mehrere Werte eventuell unterschiedlicher Typen zu einem Ganzen zusammenzufassen.
Beispiel: Tripel |
# let ones = (1, 1.0, "One");; val ones : int * float * string = (1, 1.0, "One") |
Das Tripel ones ist definiert als das Produkt der Typen int, float und string.
Die Zerlegung (Dekomposition), d.h. der Zugriff auf einzelne Elemente wird realisiert durch triviales Pattern Matching.
Zugriff auf einzelne Elemente erfolgt durch Pattern Matching | ||
Beispiel: Dekomposition von Paaren |
# let first ( x, _ ) = x;; val first : 'a * 'b -> 'a = <fun> |
|
# let second ( _ ,y ) = y;; val second : 'a * 'b -> 'b = <fun> |
||
Umgruppierung von Paaren |
# let swap ( x, y ) = y, x;; val swap : 'a * 'b -> 'b * 'a = <fun> |
|
Paarbildung |
# let pairfirst ( x, _ ) ( y, _ ) = x, y;; val pairfirst : 'a * 'b -> 'b * 'c -> 'a * 'c = <fun> |
Alle hier gezeigten Funktionen sind polymorph, d.h. eine Verarbeitung von Paaren beliebigen Typs ist möglich.
Sinnvolle Auswahl und Einsatz von Datentypen ! | ||
Beispiel: Tupel als Verbund : Schlecht ! |
# type stud = string * int * int;; |
|
Record als Verbund : Besser ! |
|
Die Verwendung von Tupeln zur Speicherung von Datensätzen beispielsweise einer Datenbank ist nicht sinnvoll.
Der Einsatz von Records stellt hierfür eine geeignete Lösung dar. Die benannten Feldkomponenten spiegeln hierbei
deutlicher die problemspezifische Struktur der verbundenen Daten wieder, und die Werte der einzelnen Elemente können
während des Programmlaufs verändert werden, sofern die Datenfelder veränderlich (mutable) deklariert sind.
Neben der Möglichkeit Records durch Pattern Matching zu zerlegen, kann über die definierten Label auf die Feldkomponenten zugegriffen werden.
Hinweis:
"#" kennzeichnet Eingaben im OCaml Interpreter,
"val" bzw "- :" das Ergebnis der Auswertung und automatischen Typanalyse inkl. der vom System inferierten Typen.