Deklariert eine statische Variable oder erzeugt ein statisches Array.
Static [Scope] $variable [ = initializer ]
Static [Scope] $avArray[subscript 1]...[subscript n] [ = initializer ]
Scope | Ein optionaler Modifizierer, Local oder Global, der die Sichtbarkeit der Variablen angibt. |
$variable | Der Name der zu deklarierenden statischen Variable. |
initializer | Der Wert, der bei Initialisierung der Variablen zugewiesen wird. Der Initialisierer kann ein Funktionsaufruf sein der mathematische oder String-Operationen umfassen kann. Dieser Initialisierer wird nur ausgewertet, wenn die Variable das erste Mal deklariert wird. |
subscript | Die Anzahl der zu erstellenden Elemente für die Array-Dimension, indexiert von 0 bis n-1. |
Das Schlüsselwort Static kann vor dem optionalen Gültigkeitsbereich, oder nach diesem in der Zeile auftreten. Local Static oder Static Local sind beide akzeptabel.
Falls der Gültigkeitsbereich Local genutzt wird, dann ist die statische Variable nur sichtbar und benutzbar in der Funktion in der diese deklariert ist. Falls der Gültigkeitsbereich Global genutzt wird, dann ist die statische Variable sichtbar und benutzbar in allen Teilen des Skriptes; in diesem Zusammenhang, ein Global Static hat kaum einen Unterschied zu einer Global Variable. Falls der Gültigkeitsbereich nicht angegeben wird, dann wird die statische Variable im lokalen Gültigkeitsbereich erzeugt; in dieser Art ist Static ähnlich zu Dim.
Der Unterschied zwischen Local und Static ist die Lebensdauer der Variablen. Local Variablen werden nur gespeichert während die Funktion aufgerufen wird und sind nur innerhalb der Funktion sichtbar in der diese deklariert sind; wenn die Funktion zurückkehrt, werden alle Variablen freigegeben. Static Variablen sind ebenso nur innerhalb der funktion sichtbar in der diese deklariert sind, aber sie existieren weiter und behalten ihren letzten Wert, nachdem die Ausführung der Funktion beendet ist. Wenn nach Variablen gesucht wird, wird der lokale Gültigkeitsbereich zuerst geprüft und dann der globale als zweites.
Das Schlüsselwort Static führt ähnliche Funktionen aus wie die Schlüsselworte Global/Local/Dim.
Static $a, $b, $c
Static $a = 2, $b = 10, $c = 20
AutoItSetOption, Local, ReDim, UBound
#include <MsgBoxConstants.au3>
; Ruft die Example-Funktion auf um die statische Variable in dessen lokalen Gültigkeitsbereich (Scope) zu initialisieren.
Example()
; Ruft die Example-Funktion ein zweites Mal auf um zu zeigen, dass die Variable den Inhalt behalten hat, den wir ihr zuletzt zugewiesen haben.
Example()
Func Example()
Local Static $sString = "Dies ist eine Textzeile welche deklariert wird mittels einer statischen Variable innerhalb eines lokalen Gültigkeitsbereich." & @CRLF & @CRLF & _
"Die Variable $sString wird nur dieser Funktion sichtbar sein bis das Script sich beendet."
MsgBox($MB_SYSTEMMODAL, "", $sString)
$sString = "Wenn man nur den lokalen Gültigkeitsbereich für diesen String verwenden würde, so wäre dieser String nicht sichtbar wenn wir die Funktion mehrfach aufrufen." & @CRLF & @CRLF & _
"Da wir aber das Static Schlüsselwort verwenden wird die Variable $sString ihren zuletzt zugewiesenen Wert behalten."
EndFunc ;==>Example
#include <MsgBoxConstants.au3>
Example()
Func Example()
SomeFunc() ; This will display a message box of 1, 1.
SomeFunc() ; This will display a message box of 1, 2.
SomeFunc() ; This will display a message box of 1, 3.
EndFunc ;==>Example
Func SomeFunc()
; This initialises a Static variable in Local scope. When a variable is declared just in Local scope (within a Function,)
; it's destroyed when the Function ends/returns. This isn't the case for a Static variable. The variable can't be
; accessed from anywhere else in the script apart from the Function it was declared in.
Local Static $vVariableThatIsStatic = 0
Local $vVariableThatIsLocal = 0
$vVariableThatIsLocal += 1 ; This will always be 1 as it was destroyed once returned from SomeFunc.
$vVariableThatIsStatic += 1 ; This will increase by 1.
MsgBox($MB_SYSTEMMODAL, $vVariableThatIsLocal, $vVariableThatIsStatic)
EndFunc ;==>SomeFunc