FirstStep - Eine Ausbildungssprache

Inhalt

  1. Die Struktur von FirstStep
  2. Link-Definitionen
  3. Schreibweise
  4. Blöcke
  5. Definitionen
  6. Deklarationen
  7. Anweisungen
  8. Funktionen und Prozeduren
  9. Klassen
  10. Ein- und Ausgabe, Dateien und Verbindungen
  11. Syntax

    Anhang:

  1. Beispiele
  2. Module
  3. Dokumentation zu FirstStep in Word 6.0
    Dokumentation zu FirstStep in Word 7.0
    Dokumentation zu FirstStep in PostScript

zurück Index vor

8 Funktionen und Prozeduren

8.1 Definition von Funktionen und Prozeduren

Die formale Funktionsdefinition wurde bereits in 5 angegeben:

Eine Funktion besitzt Werte-, Referenz- und Ergebnisparameter (sowie die unten eingeführten Funktionsparameter); Werteparameter werden wie initialisierte Variable verwendet und ohne Schlüsselwort gekennzeichnet, Referenzparameter werden durch die Klammern "<"ParameterName">" gekennzeichnet. Diese Schreibung soll andeuten, daß der Wert "transparent" an die aufrufende Stelle übergeben wird. Ergebnisparameter werden erst bei Beendigung der Funktion (durch return) gesetzt (call-by-result).

Beispiel

Zum besseren Verständnis soll im folgenden eine operationale Semantik eines Funktionsaufrufs angegeben werden. Die Funktion

erzeugt beim Aufruf

einen Aktivierungsstack der Form:

und es werden die folgenden Werte initialisiert:

und die folgenden Anweisungen ausgeführt:

Der Rücksprung bewirkt eine Zuweisung der Ergebniswerte an die Variablen:

Prozeduren sind Funktionen ohne Ergebnisparameter; ihnen geht das Schlüsselwort procedure voran.

Werden Funktionen mit mehreren Ergebnisparametern als Parameter von anderen Funktionen oder Prozeduren verwendet, so überprüft der Compiler, ob die Reihenfolgen der Typen von Ergebnisparametern und Funktions-Werteparametern übereinstimmen. Eine Funktion mit den Parametertypen (real, integer, boolean, real) kann somit die Funktion mit den Ergebnisparametern (integer, boolean) als zweiten Parameter aufnehmen: (1.3, Funktion, true). Man beachte, daß bei der obigen operationalen Spezifikation die Ergebnisparameter als erste auf den Aktivierungsstack gebracht wurden, so daß diese dort "gleich stehen bleiben" können, nachdem die innere Funktion ausgewertet wurde.

Ein Funktionstyp, der beispielsweise für Funktionsparameter benötigt wird, wird allein durch die Parameterlisten bestimmt:

Eine Funktion dieses Typs kann durch den Namen und den Rumpf spezifiziert werden, beispielsweise folgendermaßen:

Die Namen der formalen Parameter werden somit nur in der Funktionsdefinition aufgelistet. Es ist allerdings optional möglich, auch die Typen zu schreiben, die jedoch mit denen bei der Funktionstypdefinition übereinstimmen müssen:

8.2 Funktions- und Prozedurvariable

Eine Funktion bzw. Prozedur wird über ihren Namen sowie ihre Parameter identifiziert. Um unter dem gleichen Namen verschiedene Funktionalitäten aufzurufen, können Funktionsvariable verwendet werden. Diesen sind eindeutig die Parameterlisten, zuzuordnen:

bzw. bei Prozeduren:

Wird eine Funktions/Prozedurvariable mit einem Anfangswert versehen (siehe Beispiel unten), so können die Typparameter entfallen. Damit ist das ";" statt des "==" das Kennzeichen, daß es sich um eine Variablendeklaration und nicht um eine Definition handelt. Wird stattdesen ":=" geschrieben, so ist eine Funktions/Prozedur-Variablen-Deklaration mit Initialisierung gemeint (siehe nächstes Beispiel).

Um Inkonsistenzen zu verhindern, sind Funktions/Prozedurvariable nur in der "tiefsten" Umgebung bekannt. Daher sollten Funktions/Prozedurvariable und Funktionen nur in der gleichen Umgebung definiert werden, bzw. keine nicht lokalen Namen referieren.

Ist Func ein Funktionsname und FuncVar eine typgleiche Functionsvariable, so kann durch:

der Funktionsvariablen die Funktionalität von Func zugeordnet werden. Es ist jederzeit möglich, diesen Wert durch eine andere Zuweisung zu ändern. Dann kann FuncVar genauso verwendet werden wie eine Funktion. Somit hängt die Funktionalität von FuncVar von der letzten Zuweisung an FuncVar ab.

Beispiel

Beispiel für Funktionsvariable:

Funktions/Prozedurvariable können auch Parameter von Funktionen bzw. Prozeduren sein. Sie werden dann entsprechend definiert:

Beispiel

Beispiel für Funktionsparameter:

Funktions/Prozedurvariable werden in FirstStep verwendet, um Funktionen bzw. Prozeduren in Klassen durch abgeleitete Klassen zu verändern. Sie entsprechen dem virtual-Konzept von Simula 67 bzw. C++ oder Eiffel.

Weitere Informationen zu FirstStep finden Sie in dem Buch "System, Model, Programm".

zurück Index vor