Static
BeschreibungStatic[.<Typ>] <Variable[.<Typ>]> [= <konstanter Ausdruck>] [, ...]
Static ermöglicht das Deklarieren einer lokalen (statischen) Variable, die ihren Wert behält, in einer Prozedur, auch wenn die gleiche Variable im Hauptprogramm bereits als Global deklariert wurde.
Wenn nach Static ein Typ angegeben wird, dann wird der Standard-Typ für diese Deklaration geändert. Static kann auch zusammen mit Arrays, Listen und Maps verwendet werden. Beim Deklarieren eines statischen Arrays muss der Größen-Parameter ein konstanter Wert sein.
Der Wert der Variable wird nicht bei jedem Prozedur-Aufruf neu initialisiert (zurückgesetzt). Dies bedeutet, dass Sie lokale Variablen parallel zu globalen Variablen (mit dem gleichen Namen) verwenden können und beide ihre Werte beibehalten. Jeder Variable kann auch sofort ein Standard-Wert zugewiesen werden, dies muss aber ein konstanter Wert sein.
Neben Static können Sie auch das Schlüsselwort Protected verwenden, um globale von lokalen Variablen zu trennen. Mit Protected behalten die lokalen Variablen jedoch nicht ihren Wert.
Beispiel: Mit Variable
Global a a = 10 Procedure Change() Static a a+1 Debug "In Procedure: "+Str(a) ; Wird 1, 2, 3 ausgeben, da sich die Variable bei jedem Prozedur-Aufruf um eins erhöht. EndProcedure Change() Change() Change() Debug a ; Wird 10 ausgeben, da die statische Variable nicht die globale beeinflusst.
Beispiel: Mit Array
Global Dim Array(2) Array(0) = 10 Procedure Change() Static Dim Array(2) Array(0)+1 Debug "In Procedure: "+Str(Array(0)) ; Wird 1, 2, 3 ausgeben, da sich der Wert des Array-Felds bei jedem Prozedur-Aufruf um eins erhöht. EndProcedure Change() Change() Change() Debug Array(0) ; Wird 10 ausgeben, da das statische Array nicht das globale beeinflusst.
Beispiel: Mit mehreren Prozeduren
Procedure Foo() Static x = 100 ; die Deklaration und die Zuweisung erfolgt nur einmal am Programmstart. Debug x x + 1 EndProcedure Foo() ; Display 100 Foo() ; Display 101 Foo() ; Display 102 Debug "---" Procedure Bar() Static x ; die Deklaration erfolgt nur einmal am Programmstart. x = 100 ; die Zuweisung erfolgt bei jedem Prozeduraufruf. Debug x x + 1 EndProcedure Bar() ; Wird 100 ausgeben Bar() ; Wird 100 ausgeben Bar() ; Wird 100 ausgeben