Syntax A: STATIC Variable AS Typ [= einfacherAusdruck] [, Variable AS Typ [= einfacherAusdruck] [, ...] ]
Syntax B: STATIC AS Typ Variable [= einfacherAusdruck] [, Variable [= einfacherAusdruck] [, ...] ]
Syntax C: STATIC Array([Start TO] Ende [, [Start TO] Ende] [, ...]) AS Typ [= {Ausdruck [, ... ] }]
Typ: Anweisung
Kategorie: Deklaration
STATIC deklariert Variablen oder Arrays einer lokalen Prozedur und speichert sie, wenn die Prozedur beendet wird, sodass ihr Wert beim nächsten Aufruf der Prozedur wieder verfügbar ist. Die Anweisung arbeitet damit ähnlich wie DIM, nur dass der Wert für den nächsten Prozeduraufruf erhalten bleibt.
- 'Variable' bzw. 'Array' ist ein Bezeichner für eine Variable oder ein Array, die/das in der lokalen Prozedur dimensioniert und gespeichert werden soll.
- 'Typ' ist der Datentyp der Variable / des Arrays. Siehe Datentypen.
- Ebenso wie bei DIM ist es möglich, Variablen-Initiatoren zu verwenden.
Beispiel 1:
DECLARE SUB zaehl
zaehl
zaehl
SLEEP
SUB zaehl
STATIC i AS INTEGER
i += 1
PRINT "Dies ist der " & i & ". Aufruf."
END SUB
Ausgabe:
Dies ist der 1. Aufruf.
Dies ist der 2. Aufruf.
STATIC kann auch den Wert einer Variable initialisieren. In diesem Fall wird die Wertzuweisung des Initiators nur beim ersten Aufruf der Prozedur vorgenommen. Bei späteren Aufrufen wird mit dem gespeicherten Wert weitergearbeitet.
Beispiel 2:
FUNCTION produkt (param AS INTEGER) AS INTEGER
STATIC wert AS INTEGER = 1
wert *= param
RETURN wert
END FUNCTION
PRINT produkt(3)
PRINT produkt(4)
PRINT produkt(5)
SLEEP
Ausgabe:
3
12
60
STATIC kann auch in UDTs verwendet werden, wodurch sich alle Instanzen der Klasse den Wert teilen. Die Variable verhält sich also, als ob sie SHARED wäre, allerdings nur für die Objekte der Klasse selbst.
Eine statische Variable in einer Klasse muss auch einmalig außerhalb der Klasse deklariert werden. Siehe dazu folgendes Beispiel:
Beispiel 3:
Type Teil
Private:
Static As Integer anzahl
Dim As String teileName
Public:
Declare Constructor (bezeichnung As String)
Declare Function wieviele As Integer
End Type
Dim As Integer Teil.anzahl = 0
Constructor Teil (bezeichnung As String)
This.anzahl += 1
This.teileName = bezeichnung
End Constructor
Function Teil.wieviele As Integer
Return This.anzahl
End Function
Dim As Teil teil1 = Teil("Schraube")
Print "Teileanzahl: " & teil1.wieviele
Dim As Teil teil2 = Teil("Mutter")
Print "Teileanzahl: " & teil2.wieviele
Sleep
Unterschiede zu QB:
In QB kann STATIC nur in Prozeduren und innerhalb DEF FN verwendet werden.
Unterschiede zu früheren Versionen von FreeBASIC:
- Seit FreeBASIC v0.90 kann STATIC auch bei Variablen in UDTs verwendet werden.
- Seit FreeBASIC v0.16 kann STATIC auch auf Modulebene (außerhalb von SUBs/FUNCTIONs) angewandt werden. So verwendet arbeitet es genauso wie DIM.
Siehe auch:
STATIC (Klausel), STATIC (Meta), STATIC (Schlüsselwort), STATIC (UDT), DIM, SHARED, Datentypen und Deklarationen