Programmierkurs: Delphi: Pascal: Typdefinition
Typdefinition
BearbeitenBei einer Typdefinition wird einem Datentyp ein eigener Bezeichner zugeordnet. Die Typdefinitionen stehen vor den Variablendefinitionen und werden mit dem Schlüsselwort type eingeleitet. Die Syntax zeigen die folgenden Beispiele.
In den obigen Beispielen wird den in Delphi definierten Typen Integer sowie Word ein zusätzlicher Bezeichner, hier TInt sowie THandle gegeben. In Variablendefinitionen können danach die neuen Bezeichner verwendet werden.
Im Folgenden werden weitere mögliche Typdefinitionen beschrieben.
Es wird als guter Stil empfunden, wenn Typdefinitionen, die einen Zeiger (englisch: Pointer) definieren, mit P beginnen und alle anderen Typdefinitionen mit T.
Teilbereiche von Ganzzahlen
Bearbeitentype
TZiffer = 0..9; // Die Zahlen 0 bis 9
TSchulnote = 1..6;
var
a, b: TZiffer;
begin
a := 5; // zulässig
// a := 10; Diese Zuweisung erzeugt beim Kompilieren eine Fehlermeldung.
b := 6;
a := a + b; // Dies führt bei Laufzeit zu einer Fehlermeldung, da das
// Ergebnis (11) außerhalb des Wertebereiches von TZiffer liegt.
end.
Aufzählungen
Bearbeitentype
TWochentag = (Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag);
var
Tag: TWochentag;
begin
Tag := Mittwoch;
if Tag = Sonntag then Writeln('Sonntag');
end.
Aufzählungen sind identisch mit Teilbereichen von Ganzzahlen, die mit 0 beginnen. Sie machen aber den Code besser lesbar, wie im letzten Beispiel verdeutlicht.
Records, Arrays
Bearbeitentype
TKomplex = record
RealTeil: Double;
ImaginaerTeil: Double;
end;
TSchulnote = (sehr_gut, gut, befriedigend, ausreichend, mangelhaft, ungenuegend);
TSchulfach = (Deutsch, Mathe, Physik, Sport, Englisch, Kunst, Musik, Biologie);
TNotenArray = array[TSchulfach] of TSchulnote;
var
a, b: TKomplex;
Noten: TNotenArray;
function Addieren(a1, a2: TKomplex): TKomplex;
begin
Result.RealTeil := a1.RealTeil + a2.RealTeil;
Result.ImaginaerTeil := a1.ImaginaerTeil + a2.ImaginaerTeil;
end;
begin
a.RealTeil := 3;
a.ImaginaerTeil := 1;
b := a;
a := Addieren(a, b);
Noten[Deutsch] := gut;
Noten[Mathe] := mangelhaft;
Noten[Physik] := sehr_gut;
end.
Records oder Arrays als Typdefinition haben den Vorteil, dass sie direkt einander zugewiesen werden können (a := b) und dass sie als Parameter sowie Rückgabewert einer Funktion zulässig sind. Vergleiche (if a = b then...) sind allerdings nicht möglich.
Zeiger
Bearbeitentype
PWord = ^Word;
PKomplex = ^TKomplex; // nach obiger Typdefinition von TKomplex
var
w: PWord;
k: PKomplex;
begin
New(w);
New(k);
w^ := 128;
k^.RealTeil := 20.751;
k^.ImaginaerTeil := 12.5;
Dispose(k);
Dispose(w);
end.
Zeiger als Typdefinion sind ebenfalls als Parameter sowie Rückgabewert von Funktionen zulässig. Da ein Zeiger immer eine Adresse speichert, unabhängig vom Typ, auf den der Zeiger zeigt, kann die Typdefinition auch nach der Definition des Zeigers erfolgen, wie im nachfolgenden Beispiel.
type
PKettenglied = ^TKettenglied;
TKettenglied = record
GliedId: Integer;
Naechstes: PKettenglied;
end;
Klassen
BearbeitenDie Deklarierung von Klassen ist ebenfalls eine Typdefinition. Diese werden wir aber aufgrund des Umfangs in einem späteren Kapitel gesondert behandeln.
Pascal: Prozeduren und Funktionen | Inhaltsverzeichnis | Pascal: Typumwandlung |