Programmierkurs: Delphi: Pascal: Typdefinition
Aus Wikibooks
Inhaltsverzeichnis |
[Bearbeiten] Typdefinition
Bei einer Typdefinition wird einem Variablentyp ein neuer Bezeichner zugeordnet. Die Typdefinitionen stehen vor den Variablendefinitionen und werden mit dem Schlüsselwort Type eingeleitet. Die Syntax zeigen die folgenden Beispiele.
type int = Integer; THandle = Word; var zaehler: int; fensterhandle: THandle;
In den obigen Beispielen wird den in Delphi definierten Typen Integer sowie Word ein zusätzlicher Bezeichner, hier int sowie THandle gegeben. In Variablendefinitionen können danach die neuen Bezeichner verwendet werden.
Im Folgenden werden weitere mögliche Typdefinitionen beschrieben.
[Bearbeiten] Teilbereiche von Ganzzahlen
type 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 außerhalb des Wertebereiches von TZiffer liegt!!! end;
[Bearbeiten] Aufzählungen
type TWochentag = (Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag); TSchulnote = (sehr_gut, gut, befriedigend, ausreichend, mangelhaft, ungenuegend); 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.
[Bearbeiten] Records, Arrays
type TKomplex = record RealTeil: Double; // Single, Double, Extended und Real sind in // Delphi definierte Fließkommazahlen ImaginaerTeil: Double; end; TNotenArray = array[1..6] of Integer; var a, b: TKomplex; Noten: TNotenArray; function Plus(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 := Plus(a, b); 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.
[Bearbeiten] Zeiger
type PWord = ^Word; PKomplex = ^TKomplex; // nach obiger Typdefinition von TKomplex var w: PWord; begin ... w^ := 128; ... 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 Glied: Integer; Naechstes: PKettenglied; end;
[Bearbeiten] Klassen
Die Deklarierung von Klassen ist ebenfalls eine Typdefinition.
Es wird als guter Stil empfunden, wenn Typdefinitionen, die einen Zeiger (englisch: Pointer) definieren, mit P beginnen und alle anderen Typdefinitionen mit T.
| Inhaltsverzeichnis | Pascal: Typumwandlung |