3. Zusammengesetzte Datentypen

Sie haben neben den primitiven Datentypen bereits eine Möglichkeit kennengelernt, Daten zu bündeln, nämlich Tupel. Diese sind leicht zu benutzen, haben aber einen entscheidenden Nachteil. Ich repräsentiere Ihnen mal einen Punkt als Tupel:
point : (Float, Float)                    
point = (2.0, -3.0)
(2.0, -3.0) : (Float, Float)

Was ist jetzt die \(x\)-Kooridnate? Die erste Stelle oder die zweite? Wir haben uns auf die erste geeinigt. Wie können wir einen Kreis repräsentieren? Klar: als Tripel. Zwei Zahlen für den Mittelpunkt und eine für den Radius:

circle : (Float, Float, Float)                    
circle = (2.0, -3.0, 0.7)

Das geht! In Elm können Sie Tripel verwenden. Dann hört es aber auf. Quadrupel können Sie nicht verwenden. Wie repräsentieren wir einen Punkt im dreidimensionalen Raum? Einfach:

point : (Float, Float, Float)                    
point = (2.0, -3.0, 0.7)

Sehen Sie das Problem? Die Bezeichner point und circle haben die gleichen Werte! Dass das eine Tripel einen Kreis und das andere einen Punkt im dreidimensionalen Raum repräsentiert, ist nur aus dem Zusammenhang (und den suggestiven Namen der Bezeichner) klar.

Nehmen wir ein anderes Beispiel. Wir wollen Kalenderdaten wie 3. Oktober 2023 in Elm verarbeiten. Wir könnten dieses Datum natürlich als Tripel darstellen: (3, 10, 2023). Wenn Sie aber mit einem amerikanischen Team zusammenarbeiten, könnten Ihre Kollegen das als den 10. März 2023 interpretieren (oder schlimmer: Code schreiben, der annimmt, dass die Daten im Format (month, day, year) vorliegen. Ihre Chinesischen Kollegen dagegen würden wahrscheinlich das Format (year, month, day) verwenden.

Sie kommen recht schnell in Teufels Küche, wenn beim Programmieren nicht sonnenklar ist, was Ihre Daten repräsentieren. Daher stellen fast alle modernen Programmiersprachen Wege zur Verfügung, neue Typen wie Circle oder Point3d oder Date zu definieren. Die Verwechslungsgefahr ist dann deutlich niedriger, und die Wiederverwendbarkeit Ihres Codes wird deutlich höher.