Typ-Aliase und Typ-Definitionen
Typ-Aliase und -Definitionen erlauben es neue Namen für bestehende Typen zu erstellen oder neue Typen zu definieren. Dieses Feature ermöglicht es mit möglichst niedrigem Aufwand DDP Programme deutlich lesbarer zu gestalten.
Typ-Aliase
Ein Typ Alias ist einfach ein weiterer Name für einen bestehenden Typ. Erstellt werden sie so:
Wir nennen eine Zahl auch eine Hausnummer. Wir nennen eine Zahl öffentlich auch eine Postleitzahl. Die Hausnummer h ist 22.
Wie man sieht können Typ-Aliase öffentlich oder privat sein, genauso wie andere Kombinationen. Typ-Aliase erstellen einfach nur einen neuen Namen für denselben Typ. Das heißt, alle Operationen bleiben erhalten und der Typ kann zu funktionen übergeben werden, die den Basistyp erwarten:
Binde "Duden/Ausgabe" ein.
Wir nennen eine Zahl auch eine Hausnummer.
Die Hausnummer h ist 22.
[ Funktioniert obwohl der Parameter von Schreibe_Zahl als Zahl deklariert wurde ]
Schreibe die Zahl h auf eine Zeile.
[ Funktioniert ohne 'als' Operator ]
Die Zahl z ist h.
Typ-Definitionen
Typ-Definitionen sehen ähnlich aus wie Typ-Aliase, haben aber einen entscheidenden Unterschied: Sie erstellen neue Typen. Das heißt Operatoren und Funktionen, die den Basistyp erwarten funktionieren nicht mit dem neuen Typ:
Wir definieren einen Zeiger als eine Zahl. Wir definieren einen String öffentlich als einen Text. [ Fehler: Ein Wert vom Typ Zahl kann keiner Variable vom Typ Zeiger zugewiesen werden (3001) ] Der Zeiger zeiger ist 2. [ Fehler: Der plus Operator erwartet einen Ausdruck vom Typ 'Zahl', oder 'Kommazahl' aber hat 'Zeiger' bekommen (3000) ] Der Zeiger zeiger2 ist (2 als Zeiger) plus (2 als Zeiger). [ OK ] Der Zeiger z ist 2 als Zeiger. [ OK ] Der Zeiger z2 ist (z als Zahl plus z als Zahl) als Zeiger.
Wie man sieht muss man Typ-Definitionen immer korrekt Umwandeln um damit arbeiten zu können.
Typdefinitionen können in ihren Basistyp und zurück umgewandelt werden. Dies Funktioniert aber nicht rekursiv:
Wir definieren einen Zeiger als eine Zahl. Wir definieren einen Index als einen Zeiger. [ OK ] Der Zeiger z ist 0 als Zeiger. [ OK ] Der Index i ist z als Index. [ Fehler: Ein Ausdruck vom Typ Index kann nicht in den Typ Zahl umgewandelt werden (3004) ] Die Zahl z2 ist 1 als Zeiger als Index als Zahl.