autarke Prozeduren

Beispiele

DIMOPTIONBASE 1
DIMOPTION ON
COM a(10)
FOR i=1 TO 10 STEP
do_init i
v=a(i)
DISP v "\n"
NEXT
STOPPROG

PROCEDURE do_init n
a(n)=n^2
END PROCEDURE
In diesem Programmbeispiel wird zuerst eine globale Variable a vom Typ Vektor mit einer Größe von 10 Elementen definiert. In einer dahinter folgenden Programmschleife wird die Prozedur do_init aufgerufen. Der Prozedur wird der aktuelle Schleifenwert i mitgegeben. Innerhalb der Prozedur hat der Wert den Namen “n“. Da der Vektor a global definiert wurde, kann die Prozedur darauf zugreifen und entsprechend Werte zuweisen.

Referenz

PROCEDURE Prozedurname [Parameter]
END PROCEDURE

Prozeduren unterscheiden sich von Unterprogrammen dahingehend, dass sie in einem eigenen Kontext abgearbeitet werden. Das bedeutet, dass Variablen aus dem aufrufenden Programm innerhalb der Prozedur nicht zur Verfügung stehen und Variablen, die in einer Prozedur angelegt werden, nach dem Beenden der Prozedur wieder gelöscht werden. Prozeduren werden aufgerufen, indem einfach ihr Name angegeben wird. Bei einem Prozeduraufruf können Variablen mitgegeben werden, die dann innerhalb der Prozedur lokal zur Verfügung stehen. Eine Prozedur liefert keine Werte zurück. Wenn eine Prozedur Variablen des aufrufenden Programmes modifizieren soll, so müssen diese Variablen innerhalb der aufrufenden Prozedur zuvor als COM deklariert worden sein.
Prozeduren können sowohl rekursiv als auch verschachtelt aufgerufen werden. Der OBAS-Interpreter ist jedoch nicht in der Lage eine mehrstufige Rekursion zu erkennen, d.h. eine Prozedur, die eine zweite Prozedur aufruft, die wiederum die erste Prozedur aufruft. Grundsätzlich sind derartige Aufrufe zulässig, in Abhängigkeit von der Speicherbelegung wird jedoch ab mehreren tausend Rekursionsebenen einen Speicherfehler zurückgeliefert.
Prozeduren können auch als Callbacks für Anwenderdialoge angegeben werden. Wird in der Definition eines Anwenderdialogs eine Callback-Prozedur festgelegt, so wird diese Prozedur immer dann automatisch aufgerufen, wenn eine entsprechende Aktion ausgelöst wird.

Siehe auch



Schatten