Référence Mot-clé


Static

Déclare une variable statique ou crée un tableau statique.

Static [Portée] $variable [ = initialisateur ]
Static [Portée] $array[dim 1]...[dim n] [ = initialisateur ]

Paramètres

Portée Un attribut optionnel, Local ou Global qui indique la portée de la variable.
$variable Le nom de la variable statique à déclarer.
initialisateur La valeur initiale assignée à la variable. La valeur initiale peut être un appel de fonction impliquant des opérations mathématiques ou de chaîne. Cette valeur initiale n'est évaluée que lors de la première exécution de celle-ci.
dim Le nombre d'éléments pour cette dimension du tableau, index de 0 à n-1.

Remarques

Le mot-clé Static peut apparaître sur la ligne avant le spécificateur de portée facultatif, ou après. Ex: Local Static ou Static Local sont tous deux acceptables.

Si le modificateur de portée Local est utilisé, alors la variable statique n'est visible et utilisable que dans la fonction dans laquelle elle a été déclarée. Si le modificateur de portée Global est utilisé, alors la variable statique est visible et utilisable dans toutes les parties du script; à cet égard, une variable statique globale a très peu de différences par rapport à une variable globale. Si le modificateur de portée n'est pas utilisé, alors la variable statique sera créée dans la portée Local; de cette façon, Static est similaire à Dim.

La différence entre Local et Static est la durée de vie de la variable. Les variables locales ne sont stockées que pendant l'appel de la fonction où elles sont créées et ne sont visibles que par celle-ci; lorsque la fonction ce termine, toutes ses variables locales sont libérées. De même, les variables statiques sont visibles seulement dans la fonction dans laquelle on les déclare, mais elles continuent à exister, conservant leur dernière valeur, après l'exécution de la fonction. Lors de la recherche des variables, la portée locale est vérifiée en premier, puis la portée globale en second.

Le mot-clé Static exécute des fonctions semblables aux mots-clés Global/Local/Dim.

  1. Ils déclarent tous une variable avant que vous ne l'utilisiez.
  2. Ils peuvent tous créer un tableau.


Note: Les variables statiques doivent être déclarées en utilisant le mot-clé Static avant d'être utilisées, Peu importe comment AutoItSetOption("MustDeclareVars") est utilisé. Les variables statiques ne peuvent être Const.

Vous pouvez aussi déclarer de multiples variables statiques sur une seule ligne :

Static $a, $b, $c


et initialiser les variables :

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



Lors de l'initialisation d'une variable statique, la valeur d'initialisation est évaluée et assignée la première fois, lorsque la variable est créée. Sur toute passe ultérieure, l'initialisation est ignorée.

Voir Local pour plus d'informations sur l'utilisation des tableaux, qui ont la même fonctionnalité que dans Local, excepté pour :
  1. La réinitialisation d'une variable Statique n'a aucun effet.
  2. Le changement de la taille d'un tableau Statique est traité comme un ReDim.
  3. Vous ne pouvez pas changer une variable statique en une variable locale ou globale, et vice versa.


Si vous voulez redimensionner un tableau, utilisez ReDim.

En relation

AutoItSetOption, Local, ReDim, UBound

Exemples

Exemple 1

#include <MsgBoxConstants.au3>

; Appelle la fonction Example pour initialiser la variable Static de portée Local.
Example()

; Appelle la fonction Example une seconde fois pour montrer que la variable a conservé la valeur que nous venons de lui assigner.
Example()

Func Example()
    Local Static $sString = "Ceci est une ligne de texte qui est stockée dans une variable Static de portée Local." & @CRLF & @CRLF & _
            "La variable $sString sera visible seulement par cette fonction et jusqu'à ce que le script s'arrête."
    MsgBox($MB_SYSTEMMODAL, "", $sString)
    $sString = "En utilisant une portée Local cette chaîne ne serait pas visible si cette fonction était appelée plusieurs fois, mais comme nous avons utilisé le mot-clé Static" & @CRLF & _
            "la variable $sString retiendra la dernière valeur qu'on lui a assignée."
EndFunc   ;==>Example

Exemple 2

#include <MsgBoxConstants.au3>

Example()

Func Example()
    SomeFunc() ; Affiche une boîte de message avec 1, 1.
    SomeFunc() ; Affiche une boîte de message avec 1, 2.
    SomeFunc() ; Affiche une boîte de message avec 1, 3.
EndFunc   ;==>Example

Func SomeFunc()
    ; Cette fonction initialise une variable Static de portée locale. Quand une variable est déclarée juste de portée locale (au sein d'une fonction,)
    ; elle est détruite lorsque la fonction se termine/retourne. Ce n'est pas le cas pour une variable Static. La variable ne peut pas être
    ; accessible de n'importe où ailleurs dans le script en dehors de la fonction, où elle a été déclarée.
    Local Static $vVariableThatIsStatic = 0
    Local $vVariableThatIsLocal = 0
    $vVariableThatIsLocal += 1 ; Ce sera toujours 1 car elle détruite à chaque retour de Ssomefunc.
    $vVariableThatIsStatic += 1 ; Cela permet d'incrémenter de 1.
    MsgBox($MB_SYSTEMMODAL, $vVariableThatIsLocal, $vVariableThatIsStatic)
EndFunc   ;==>SomeFunc