Programmiersprache Pascal

Record-Datentyp

Ein Record-Typ ist ein aggregierter Datentyp.
Er schließt verschiedene Komponenten ein, die ihrerseits einen eigenen Datentyp (skalar oder aggregiert) besitzen.

Typischerweise besteht ein Record aus mehr aus einer Komponente. Häufig unterscheiden sich wenigstens einige Komponenten in ihrem Datentyp.
Die Komponenten werden über einen Namen angesprochen.
In der Regel bleibt die Anzahl der Komponenten eines Records relativ klein.

Deklaration eines Record-Typs:

  TYPE name = RECORD
                komponente;
                komponente;
                ...
                komponente;
                variantenteil;               { wahlweise }
              END;
komponente steht jeweils für
  komponenten_name : typ;
Anstelle von komponenten_name kann auch eine Namensliste stehen (die einzelnen Namen jeweils getrennt durch ein Komma).
Innerhalb eines Record-Typs muß ein Komponentenname eindeutig sein.
Der gleiche Name kann aber in verschiedenen Record-Deklarationen verwendet werden.

Bemerkung:
Anstelle von Komponente wird in der Pascal-Literatur auch von Feld gesprochen. Diese Bezeichnung wird hier vermieden, da in anderen Sprachen (z.B Fortran) "Feld" im Zusammenhang mit Arrays verwendet wird.

Beispiele:

  TYPE datum1 = RECORD
                  tag, monat, jahr : INTEGER;
                END;
       datum2 = RECORD
                  tag : 1..31;
                  monat : 1..12;
                  jahr : 1990..2000;
                END;
       datum3 = RECORD
                  tag : 1..31;
                  monat : PACKED ARRAY[1..12] OF CHAR;
                  jahr : INTEGER;
                END;
Deklaration von Variablen mit einem Record-Typ

Beispiel:

  VAR dat1 : datum1;       { Datentyp datum1 wie oben deklariert }
      dat2 : RECORD        { anonymer Datentyp mit Struktur wie datum1 }
               tag, monat, jahr : INTEGER;
             END;
Zuweisung von Anfangswerten an Records

Standard Pascal

Die Zuweisung von Anfangswerten ist nicht möglich.

Extended Pascal

Beispiel:

  VAR tag_x : datum1 VALUE [tag: 31; monat: 12; jahr: 1995];
Turbo Pascal

Beispiel:

  CONST tag_x : datum1 = (tag: 31; monat: 12; jahr: 1995);
tag_x ist eine Variable !

Bezugnahmen auf Variablen mit einem Record-Typ

Die Bezugnahme erfolgt über qualifizierte Namen:

  record.komponente
Dabei ist record der Name einer Variablen mit Record-Typ und komponente der Name einer Komponente dieses Record-Typs.

Soll auf mehrere Komponenten eines Records zugegriffen werden, so kann die WITH-Anweisung eingesetzt werden:

  WITH record DO BEGIN
    komponente_1 := ...;
    komponente_2 := ...;
     ...
    komponente_n := ...;
  END;
Beispiel:
  dat1.tag := 8; dat1.monat := 5; dat1.jahr := 1945;
  Writeln(dat1.tag, dat1.monat, dat1.jahr);
                                               { oder }
  WITH dat1 DO BEGIN
    tag := 8; monat := 5; jahr := 1945;
    Writeln(tag, monat, jahr);
  END;
Operatoren

Auf Variablen mit einem Record-Typ sind folgende Vergleichsoperatoren anwendbar:

  =   identisch
  <>  nicht identisch
Ansonsten können Zugriffe nur komponentenweise erfolgen.
Auf die Komponente einer Variablen mit Record-Typ sind alle Operationen anwendbar, die auf Variablen des Datentyps anwendbar sind, den die Komponente besitzt.

Es ist möglich Records mit Alternativ-Komponenten zu realisieren:
Variante Records



P. Böhme, 08.08.1995