Programmiersprache Pascal

Unterprogramme

Unterprogramme sind Programmeinheiten, d.h. Bausteine, mit deren Hilfe die Konstruktion eines Programms vereinfacht werden kann.

Zu betrachten sind

Standard Pascal erlaubt die Deklaration von Unterprogrammen nur innerhalb des Programm-Blocks, dies erweist sich für die Konstruktion größerer Programme als ein sehr schwerwiegendes Problem.
Extended Pascal und (wahrscheinlich) alle neueren Pascal-Realisierungen stellen Spracherweiterungen bereit, die ein Arbeiten mit externen Unterprogrammen möglich machen. Jedoch unterscheiden sich diese Erweiterungen in der Syntax zum Teil erheblich.

Beim Aufruf eines Unterprogramms up gibt es - in Abhängigkeit vom Unterprogrammtyp - folgende Varianten:

Standard und Extended Pascal sowie die Mehrheit der Pascal-Systeme erlauben wie die meisten Programmiersprachen nur die beiden ersten Varianten.
Die Möglichkeit, neue Operatoren zu definieren bzw. vorhandene zu überladen, gibt es z.B. in Ada und in Pascal-XSC.

Die Deklaration von Prozeduren, Funktionen und Operatoren unterscheiden sich:

  PROCEDURE up ( parameterliste );
  FUNCTION up ( parameterliste ) : datentyp;
  OPERATOR up ( operanden ) resultat : datentyp;    { !! Pascal-XSC !! }
(Angegeben sind hier nur die Kopfanweisungen der Deklarationen.)

Achtung:
Eine Reihe anderer Sprachen benutzt PROCEDURE auch zur Deklaration von Funktionen, z.B. Modula, Oberon, Ada.
Der Begriff "Prozedur" kann sowohl als Synonym für "Unterprogramm" verwendet werden als auch den Spezialfall eines Unterprogramm ("eigentliche Prozedur" gegenüber Funktionsprozedur) bezeichnen.
Andererseits sind in Sprachen wie z.B. in C, C++ oder Java Prozeduren (im Sinne von Pascal) als Spezialfälle von Funktionen realisiert.

Prozeduren, Funktionen und Operatoren können innerhalb gewisser Grenzen alternativ eingesetzt werden.

Beispiel: Addition zweier ganzer Zahlen

mittels Operator

  VAR x, y, z : INTEGER;

  z := x + y;
mittels Funktion
  FUNCTION add(x, y: INTEGER) : INTEGER;
  BEGIN
    add := x + y;
  END;

  VAR x, y, z : INTEGER;
    
  z := add(x, y);
mittels Prozedur
  PROCEDURE add(x, y: INTEGER; VAR z: INTEGER);
  BEGIN
    z := x + y;
  END;
    
  VAR x, y, z : INTEGER;

  add(x, y, z);
Es ist in Pascal nicht möglich, Funktionen wie Prozeduren aufzurufen.
In C typische alternative Aufrufe wie
  rueckkehrcode := up(x, y);         { !!  nicht   !! }
  up(x, y);                          { !! zulässig !! }
sind in Pascal unzulässig.

Im Vergleich zeigt sich folgendes:

Operatoren werden typischerweise in den Sprachdefinitionen festgelegt.
Funktionen und Prozeduren werden durch Sprachstandards nicht immer bzw. oft nur für sehr elementare Aufgaben definiert. (Ausnahmen sind C bzw. C++ und Ada). Sprachrealisierungen fügen oft weitere Funktionen und Prozeduren hinzu, die sich aber häufig voneinander unterscheiden (Beispiele dafür sind Pascal und Modula, nichtportable Erweiterungen gibt es aber auch in C-Systemen).


Gestaltungsregeln

Für den Aufbau von Unterprogrammen gibt es einige Gestaltungsregeln:



P. Böhme, 09.09.1996