Schlüsselwortreferenz


Static

Beschreibung anzeigen in

Deklariert eine statische Variable oder erzeugt ein statisches Array.

Static [Scope] $variable [ = initializer ]
Static [Scope] $avArray[subscript 1]...[subscript n] [ = initializer ]

Parameter

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.

Bemerkungen

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.

  1. Sie alle deklarieren eine Variable bevor sie genutzt wird.

  2. Sie alle können ein Array erzeugen.


Achtung: Statische Variablen müssen mit dem Schlüsselwort Static deklariert werden, bevor sie benutzt werden, ganz gleich wie AutoItSetOption("MustDeclareVars") gesetzt ist. Statische Variablen können nicht Const sein.

Es können ebenso mehrere statische Variablen in einer Zeile deklariert werden:

Static $a, $b, $c


Und initialisiere die Variablen:

Static $a = 2, $b = 10, $c = 20



Wenn eine statische Variable initialisiert wird, dann wird der Anfangswert nur das erste Mal ausgewertet und zugewiesen, wenn die Variable erzeugt wird. Bei allen nachfolgenden Durchläufen wird der Initialisierer ignoriert.

Siehe Local für mehr Informationen darüber, wie man Arrays nutzt, was hat dieselbe Funktionalität wie in Local, ausgenommen für:
  1. Reinitialisierung einer Static Variable hat keinen Effekt.


  2. Eine statische Variable kann nicht von einer lokalen zu einer globalen Variablen geändert, oder umgekehrt.


Wenn die Arraygröße geändert werden soll, dann ist ReDim zu verwenden.

Verwandte Funktionen

AutoItSetOption, Local, ReDim, UBound

Beispiel

Beispiel 1

#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

Beispiel 2

#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