Referenz - FUNCTION
Typ: Prozedur
Kategorie: Programmorganisation
Syntax A:
DECLARE FUNCTION Name [OVERLOAD] [Konvention] [ [LIB "DLLName"] _
ALIAS "AliasName"] [ (Parameterliste) ] [EXPORT]
Syntax B:
[{PRIVATE | PUBLIC }] FUNCTION Name [OVERLOAD] [Konvention] _
([Parameterliste]) [STATIC] AS Rückgabetyp
' Anweisungen
END SUB
Eine FUNCTION ist eine Prozedur, die einen Wert an das Hauptprogramm zurückgibt. Siehe auch SUB zum Thema Prozeduren.
Eine FUNCTION kann als erweiterte Form einer SUB angesehen werden; im Gegensatz zu einer solchen kann eine FUNCTION auch einen Wert zurückgeben. Das bedeutet, dass ihr Bezeichner wie eine Variable eingesetzt wird, deren Wert abhängig von verschiedenen Parametern wechselt.
COS ist ein Beispiel für eine Funktion.
'Name' ist der Bezeichner, unter dem die FUNCTION aufgerufen wird.
'Parameterliste' ist eine Liste der Form
[ {BYVAL | BYREF } ] [Parameter1] AS [CONST] Typ [= Wert] [, _
[ {BYVAL | BYREF } ] [Parameter2] AS [CONST] Typ [= Wert] ] [, ...]
'Parameter1', 'Parameter2', ... sind die Parameter, die an die Funktion übergeben werden. Parameter (auch Argumente genannt) sind Variablen (bzw. ihre Werte), die in der FUNCTION verwendet werden können. Siehe auch Parameterübergabe. Nur innerhalb der DECLARE-Zeile kann der Bezeichner des Parameters ausgelassen werden; der Datentyp muss immer angegeben werden.
Sollte '[CONST]' angegeben werden, kann der Wert zwar gelesen, die Variable aber nicht mehr beschrieben werden.
'Typ' ist der Datentyp des übergebenen Parameters; siehe Datentypen. Auch UDTs (user defined types; siehe TYPE (UDT)) können verwendet werden.
Durch das '= Wert' wird ein Parameter als optional deklariert; er kann beim Aufruf der Prozedur ausgelassen werden. In diesem Fall wird an die FUNCTION für diesen Parameter 'Wert' übergeben. Das VisualBASIC-Äquivalent heißt OPTIONAL.
BYVAL und
BYREF regeln die Art der Parameterübergabe an die FUNCTION. Siehe dazu auch
OPTION BYVAL.
Zu 'Konvention' siehe die Referenz-Stichwörter CDECL, PASCAL und STDCALL.
Siehe den entsprechenden Referenz-Eintrag zu OVERLOAD.
'Rückgabetyp' ist der Datentyp des Rückgabewerts. Auch UDTs (user defined types; siehe TYPE (UDT)) sind erlaubt. Siehe dazu weiter unten.
Die STATIC-Klausel bewirkt, dass alle Variablen innerhalb der FUNCTION zwischengespeichert werden. Das bedeutet, dass die Werte von Variablen, die in der FUNCTION verwendet werden, nach einem Aufruf nicht verloren gehen, sondern beim nächsten Aufruf der FUNCTION wieder verfügbar sind. Siehe auch STATIC (Schlüsselwort).
Zu
EXPORT siehe den entsprechenden Eintrag in dieser Referenz.
Der Wert der FUNCTION kann von übergebenen Parametern abhängig sein. FUNCTIONs werden dazu verwendet, häufig auftretende Berechnungen zusammenzufassen. Es kann auch ein Pointer zurückgegeben werden.
Eine FUNCTION ist dasselbe wie eine SUB, abgesehen von der Möglichkeit, Werte zurückzuliefern. Der Wert einer Funktion kann auf dreierlei Weise gesetzt werden:
- Über ihren Bezeichner: FunktionsName = Ausdruck
- Über das Symbol "FUNCTION": FUNCTION = Ausdruck
- Über RETURN: RETURN Ausdruck Achtung: RETURN funktioniert wie FUNCTION = Ausdruck : EXIT FUNCTION
Es gibt einige gute Gründe, in Ihrem Programm FUNCTIONs einzusetzen:
- Reduzierung von redundanten Programmzeilen
- Möglichkeit der Wiederverwendung von Programmzeilen in anderen Projekten
- Leichtere Les- und Wartbarkeit des Programms
- Leichtere Erweiterbarkeit Ihres Programms
Der Rückgabewert einer FUNCTION kann beim Aufruf auch ignoriert werden. Dies kann dann sinnvoll sein, wenn die FUNCTION z.B. darüber informiert, ob ihr Code erfolgreich ausgeführt wurde. Um den Rückgabewert einer Funktion zu ignorieren, setzen Sie diese einfach wie eine SUB ein.
Beispiel:
DECLARE FUNCTION twice (x)
FUNCTION twice (x)
RETURN x * 2
PRINT "Diese Zeile wird nie ausgegeben"
END FUNCTION
PRINT twice (10) 'Gibt 20 aus, das Doppelte von 10
Eine Function kann auch einen ganzen UDT zurückgeben:
TYPE udt
v1 AS INTEGER
v2 AS INTEGER
END TYPE
DECLARE FUNCTION bla(foo AS INTEGER, bar AS INTEGER) AS udt
DIM var AS udt
var = bla(1, 3)
PRINT "Var: v1 ="; var.v1; ", v2 ="; var.v2
'Ausgabe: "Var: v1 = 10, v2 = 30"
SLEEP
FUNCTION bla(foo AS INTEGER, bar AS INTEGER) AS udt
DIM var AS udt
var.v1 = foo*10
var.v2 = bar*10
bla = var
END FUNCTION
Einem Funktionsnamen können mehrere Prozeduren zugewiesen werden; siehe OVERLOAD.
Seit FreeBASIC v0.17 kann eine FUNCTION auch Teil eines UDTs sein:
Type MyUDT
x As Integer
y As Integer
z As Integer
Declare Function SumOfAll ()
End Type
Function MyUDT.SumOfAll () As Integer
Return This.x + This.y + This.z
End Function
Dim var As MyUDT
With var
.x = 5
.y = 10
.z = -3
End With
? var.SumOfAll
GetKey
Ausgabe:
12
Unterschiede zu QB:
- Parameter können optional sein.
- Der Rückgabewert kann mit FUNCTION = Ausdruck oder RETURN Ausdruck festgelegt werden.
- FUNCTIONs können überladen werden.
- Der Rückgabewert kann beim Aufruf der Funktion ignoriert werden.
Unterschiede zu früheren Versionen von FreeBASIC:
- Bis FreeBASIC v0.17 war es auch zulässig, das STATIC-Schlüsselwort links vom Prozedur-Header zu platzieren; seit v0.17 allerdings ist die Form STATIC SUB Name ungültig.
- Seit FreeBASIC v0.17 ist es zulässig, auf Prozedurebene (z.B. innerhalb einer FUNCTION) TYPEs, UNIONs und ENUMs zu erstellen.
- Seit FreeBASIC v0.16 ist es zulässig, Arrays undefinierter Größe auch innerhalb von FUNCTIONs zu definieren. (z.B. DIM foo())
- FUNCTION overloading ist erst seit FreeBASIC v0.14 möglich; siehe OVERLOAD.
- Seit FreeBASIC v0.14 können FUNCTIONs ganze UDTs zurückgeben.
- Seit FreeBASIC v0.14 kann FUNCTION innerhalb von ASM-Blocks eingesetzt werden, um den Rückgabewert zu bestimmen.
- Seit FreeBASIC v0.13 kann RETURN als Shortcut für FUNCTION = Ausdruck : EXIT FUNCTION eingesetzt werden. Damit verbunden ist, dass GOSUB und ON...GOSUB nicht mehr auf Prozedurebene eingesetzt werden können.
- Variable Argumente sind erst seit FreeBASIC v0.13 möglich; siehe
VA_ARG. - Optionale Parameter existieren in FUNCTIONs erst seit FreeBASIC v0.13.
- Seit FreeBASIC v0.13 kann der Rückgabewert auch über FUNCTION = Ausdruck gesetzt werden.
- Seit FreeBASIC v0.12 müssen in den DECLARE-Zeilen keine Parameter-Namen mehr genannt werden; es ist jedoch immer noch zulässig.
Siehe auch:
SUB,
PROPERTY,
DECLARE,
OVERLOAD,
EXIT,
END,
BYVAL,
BYREF,
SHARED,
PRIVATE (Klausel),
PUBLIC (Klausel),
VA_ARG,
Prozeduren,
Functions,
Parameterübergabe
| Zusätzliche Informationen und Funktionen | ||||
|---|---|---|---|---|
|
||||





Versionen