OWBasic

Gruppe CONTROL Start INTRO Alphabetischer Index

Definition einer Anwender-Funktion

In OWBasic ist es möglich, Anwender-Funktionen zu definieren. Anwender-Funktionen und Prozeduren müssen am Anfang des Programmes definiert werden. Das Hauptprogramm folgt darauf.

Eine Funktionsdefinition beginnt mit dem Funktions-Kopf und endet mit der RETURN Anweisung.
FUNC test A, B#, VAR C
 <statements>
RETURN <value>
Der Funktions-Kopf beginnt mit dem Schlüsselwort FUNC gefolgt vom Namen der Funktion und der Parameterliste. Der Typ der Funktion wird wie bei Variablen durch einen Suffix bestimmt, wenn der Typ vom Standardtyp abweicht. Der Typ kann auch ein Zeiger (dann hat das Schlüsselwort FUNC das Pointer-Präfix &), aber kein selbstdefinierter sein. Die Parameterliste beschreibt den Typ der Parameter der Funktion und gibt ihnen einen formalen Namen.
Variablen, die innerhalb der Funktion eingeführt werden, sind lokal, das heißt, sie sind außerhalb der Funktion unbekannt.
Für die Parameter können auch Default-Werte angegeben werden; wenn die Funktion dann ohne diesen Parameter aufgerufen wird, wird automatisch vom Compiler der Default-Wert eingesetzt. Als Default-Werte sind für Variablenparameter auch Zeiger erlaubt.
Beispiel:
PROC clearscreen mode%=1
 CLS mode
ENDP
PROC my_messagebox text$, caption$="", time#=0.0
 msgbox text, caption, time
ENDP
PROC memory_size var size%=#NULL
 IF &size THEN
  FLASHSIZE size, dummy
 ENDIF
ENDP
Wird für einen Parameter ein Default-Wert angegeben, so darf nach diesem kein Parameter ohne Default-Wert folgen.

Funktionen berechnen einen Wert und geben ihn an das aufrufende Programm zurück. Der Rückgabewert wird bei der RETURN-Anweisung festgelgt, welche die Funtkionsdefinition abschließt.

Die Verwendung von Anwender-Funktionen ist äquivalent der Anwendung der eingebauten Funktionen. Die Anwenderfunktion wird auch dann verwendet, wenn eine gleichnamige eingebaut Funktion existiert.

Falls es für den Rückgabewert einer Funktion keine Verwendung mehr gibt, kann die Funktion auch als Prozedur aufgerufen und der Rückgabewert verworfen werden.
Beispiel:
FUNC vlen x,y: ! length of 2d vector 
PRINT "vlen called"
RETURN sqr(x*x+y*y)

x=5: y=7: ! These variables do not have to do anything with 
          ! the function parameters.
print vlen(x-5,y-2): ! Example-Call
vlen(1,2): ! call as procedure

Gruppe CONTROL Start INTRO Alphabetischer Index