FUNCTIONs

FreeBASIC-Referenz » Prozeduren in FreeBASIC » FUNCTIONs

FUNCTIONs sind ebenso wie SUBs Prozeduren. Die dort aufgeführten Informationen gelten weitgehend auch für FUNCTIONs. Im Gegensatz zu einer SUB kann eine FUNCTION allerdings auch einen Wert zurückgeben.

FUNCTIONs bestehen aus dem Prozedurheader, dem Programmcode, und der Zeile END FUNCTION. Der Prozedurheader und der Programmcode folgen denselben Regeln wie bei SUBs. Siehe FUNCTION für weitere Details zum Prozedurheader.

Im Programmcode können andere FUNCTIONs und SUBs aufgerufen werden. Es ist auch möglich, die FUNCTION selbst aufzurufen. Solche sogenannten rekursiven FUNCTIONs können manche Probleme auf sehr elegante Weise lösen, sollten jedoch mit Bedacht eingesetzt werden, da sie oft schwerer zu warten sind.

FUNCTIONs werden im Programmcode wie Variablen behandelt, die abhängig von ihren Parametern verschiedene Werte haben. Sie werden durch ihren Bezeichner aufgerufen, die Parameterliste muss in Klammern übergeben werden. Der Wert einer FUNCTION kann auf dreierlei Weise gesetzt werden:

Beispiel:

DECLARE FUNCTION twice (x AS UINTEGER) AS INTEGER

FUNCTION twice (x AS INTEGER) AS INTEGER
   twice = x * 2
END FUNCTION

'Gibt 20 aus, das Doppelte von 10:
PRINT twice(10)
SLEEP

Eine rekursive FUNCTION:

FUNCTION Fakultaet (x AS UINTEGER) AS DOUBLE
  IF x = 0 THEN
    RETURN 1
  ELSE
    RETURN x * Fakultaet(x-1)
  END IF
END FUNCTION

PRINT Fakultaet(6)
SLEEP

Als Rückgabewert wurde ein DOUBLE gewählt, weil damit wesentlich größere Fakultäten berechnet werden können als mit Ganzzahl-Typen (allerdings wird das Ergebnis ab 19! gerundet). Rekursive Funktionen haben den Nachteil, dass der benötigte Speicherplatz von der Tiefe der Verschachtelung abhängig ist. Im obigen Beispiel liegen die Ergebnisse aber schon lange außerhalb des Speicherbereichs eines DOUBLEs, bevor der Programmspeicherplatz knapp wird.