Programmierkurs: Delphi: Pascal: Typdefinition

Aus Wikibooks

Typdefinition[Bearbeiten]

Bei 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.

Code:

type
  TInt = Integer;
  THandle = Word;

var
  zaehler: TInt;
  fensterhandle: THandle;

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[Bearbeiten]

Code:

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 (11) außerhalb des Wertebereiches von TZiffer liegt.
end.

Aufzählungen[Bearbeiten]

Code:

type
  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[Bearbeiten]

Code:

type
  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[Bearbeiten]

Code:

type
  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.

Code:

type
  PKettenglied = ^TKettenglied;
  TKettenglied = record
    GliedId: Integer;
    Naechstes: PKettenglied;
  end;

Klassen[Bearbeiten]

Die 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