Programmiersprache Pascal

Prozedurale Datentypen

Variablen eines Prozedurtyps dienen als Zeiger auf Unterprogramme (Prozeduren, Funktionen). Sie ermöglichen es, Algorithmen zu notieren, in denen nicht fest fixierte Unterprogramme aufgerufen werden. Die jeweils zu verwendenden Unterprogramme werden als Parameter übergeben.

Standard Pascal, Extended Pascal

Prozedurale Datentypen sind nicht vorhanden.

Dies stellt keine wesentliche Einschränkung dar:
Zur Formulierung von Algorithmen, in denen Unterprogramme als Parameter auftreten, genügen prozedurale Parameter.
Dies stellt eine weniger flexiblere, aber dafür auch weniger fehleranfällige Lösung dar.

Turbo Pascal

Turbo Pascal ermöglicht es mit Hilfe der Prozedurtypen, Prozeduren und Funktionen wie Größen zu behandeln, die Variablen zugewiesen und als Parameter übergeben werden können.

Die Deklaration eines Prozedurtyps gibt die Parameter und, bei einer Funktion, den Ergebnistyp an. Die Syntax einer Prozedurtyp-Deklaration ist dieselbe wie die eines Prozedur- oder Funktionskopfs, nur daß dabei der Bezeichner hinter PROCEDURE oder FUNCTION weggelassen wird.

Beispiele:

  TYPE proc = PROCEDURE;
       swap_proc = PROCEDURE(VAR x, y: INTEGER);
       str_proc = PROCEDURE(s: STRING);
       math_func = FUNCTION(x: REAL): REAL;
       device_func = FUNCTION(VAR f: TEXT): INTEGER;
       max_func = FUNCTION(a, b: REAL; f: math_func): REAL;
Die Namen der Parameter in einer Prozedurtyp-Deklaration haben keinerlei Bedeutung.
Funktionen, die einen Prozedurtyp zurückgeben, können in Turbo Pascal nicht deklariert werden. Zulässige Typen für Funktionswerte sind String-Typen, Real, Integer, Char, Boolean, Zeiger (Pointer), oder selbstdefinierte Aufzählungstypen.

Eine Prozedurvariable muß solche Prozeduren oder Funktionen referenzieren, die zuweisungskompatibel zum Typ der Konstanten sind.

Beispiel:

  TYPE error_proc = PROCEDURE(errorcode: INTEGER);    { Prozedurtyp }

  PROCEDURE default_error(errorcode: INTEGER);        { Prozedur- }
  BEGIN                                               { vereinbarung }
    Writeln('Fehler ', errorcode, '.');
  END;

  CONST error_handler: error_proc = default_error;    { Prozedurvariable ! }


P. Böhme, 08.09.1996