Inhaltsverzeichnis

2.10 Deklaration von Typen

In der Variablendeklaration wird der Typ als eine konstante Eigenschaft der Variablen festgelegt. Bisher kennen Sie die Standardtypen mit den vordefinierten Namen INTEGER, REAL, CHAR, BOOLEAN und STRING. Im vorausgegangenen Abschnitt 2.9 wurden bereits Array-Variablen definiert. Sie sind ein erstes Beispiel für Typen, die der Programmierer selbst definiert. Wie Konstanten und Variablen können auch Typen Namen erhalten. Dies geschieht im Typvereinbarungsteil, der im Programmtext zwischen dem Konstanten- und dem Variablenvereinbarungsteil steht und mit dem Wortsymbol TYPE eingeleitet wird:

PROGRAM TYPES (INPUT,OUTPUT);
  CONST N = 4;
  TYPE  GANZEZAHL  = INTEGER;
        GROSSEZAHL = REAL;
        TMATRIX    = ARRAY [1..N, 1..N] OF GANZEZAHL;
        LONGSTRING = STRING[255];
        SHORTSTRING= STRING[16];

  VAR   I          : GANZEZAHL;
        J          : INTEGER;
        STR1       : LONGSTRING;
        STR2       : SHORTSTRING;
        MAT1, MAT2 : TMATRIX;
        MAT3       : ARRAY [1..N, 1..N] OF GANZEZAHL;
        MAT4       : TMATRIX;

BEGIN
END.

Bild 32: Typdeklarationen

In Pascal 2.0 können mehrere Typdeklarationsteile existieren, die auch mit Variablendeklarationsteilen gemischt werden können. Jedoch muß jeder Typname vor seiner Anwendung deklariert werden:

PROGRAM TYPES (INPUT,OUTPUT);
  TYPE  GANZEZAHL  = INTEGER;
        GROSSEZAHL = REAL;
  VAR   I          : GANZEZAHL;
        J          : INTEGER;

  CONST N = 4;
  TYPE  TMATRIX    = ARRAY [1..N, 1..N] OF GANZEZAHL;
  VAR   MAT1, MAT2 : TMATRIX;
        MAT3       : ARRAY [1..N, 1..N] OF GANZEZAHL;
        MAT4       : TMATRIX;

  TYPE  LONGSTRING = STRING[255];
        SHORTSTRING= STRING[16];
  VAR   STR1       : LONGSTRING;
        STR2       : SHORTSTRING;
BEGIN
END.

Bild 33: Gemischte Deklarationsteile in Pascal 2.0

Für zusammengesetzte Typen ist die Benutzung von Typbezeichnern besonders sinnvoll. Im letzten Abschnitt wäre die Struktur der Variablen H1 und H2 mit der folgenden Typdeklaration sofort erkennbar geworden:

TYPE BELEGUNG       = INTEGER;
     FLUR           = ARRAY [1..10] OF BELEGUNG;
     STOCK          = ARRAY [1..4]  OF FLUR;
     HAUS           = ARRAY [0..20] OF STOCK;
VAR  H1,H2: HAUS;

Eine wichtige Aufgabe der Typdeklaration besteht darin, die Menge der Variablen in einem Programm in Klassen aufzuteilen. Zuweisungen und Operationen sind nur zwischen den Mitgliedern kompatibler Klassen möglich. Bereits bei der Übersetzung sind dadurch weitgehende Prüfungen des Programmtextes möglich.

Die folgenden Regeln legen die Typkompatiblität in Pascal fest. Dabei werden einige Regeln schon im Vorgriff auf spätere Kapitel aufgeführt:

  1. Zwei Variablen eines zusamengesetzten Typs (Array, Record, Menge) sind nur dann zuweisungskompatibel, falls sie in einer gemeinsamen Variablendeklaration oder mit demselben Typnamen definiert wurden.
  2. Stringausdrücke können Stringvariablen zugewiesen werden. Dabei finden die in Abschnitt 2.9.2 beschriebenen Anpassungsoperationen bei Ausdrücken des Typs CHAR und ARRAY OF CHAR statt.
  3. Werte eines Unterbereichs (s. Abschnitt 2.12.2) können Variablen des Basistyps zugewiesen werden.
  4. Ein ganzzahliger Wert kann immer einer reellen Variablen zugewiesen werden.
  5. Alle anderen Zuweisungen sind fehlerhaft.
Die erste Regel soll am Beispiel der Deklarationen aus Bild 32 verdeutlicht werden:

MAT1:= MAT2   (zulässig)
MAT4:= MAT1   (zulässig)
MAT3:= MAT1   (unzulässig)
MAT4:= MAT3   (unzulässig)

Einige Compiler sind bei der Interpretation der Regeln zur Typkompatibilität etwas großzügiger. Sie erlauben in Einzelfällen auch Zuweisungen zwischen Variablen, die nur die gleiche Struktur besitzen MAT3:= MAT1 ist dann zulässig (s. auch [3], Anhang E).

Inhaltsverzeichnis