Référence Mot-clé


Dim / Global / Local / Const

Déclare une variable, une constante ou crée un tableau.

Global | Local [Const] $variable [ = initializer ]
Global | Local [Const] $aArray[subscript 1]...[subscript n] [ = initializer ]

Paramètres

Const [optionnel] Si présent, le mot-clé Const crée une constante plutôt qu'une variable.
$variable Le nom de la variable/constante à déclarer.
initializer La valeur qui sera initialement assignée à la variable. Une Const doit inclure l'initialisation. L'initialisation peut être un appel à une fonction.
subscript Le nombre d'éléments à créer pour la dimension du tableau, indexé de 0 à n-1.

Remarques

Les mots-clés Dim/Local/Global effectuent des opérations similaires :
1. Déclare une variable avant de l'utiliser (semblable à VBScript)
2. Crée un tableau

Note: Dans AutoIt, vous pouvez créer une variable simplement en lui assignant une valeur ($myvar = 0) mais beaucoup de personnes aiment les déclarer explicitement. Si AutoItSetOption("MustDeclareVars", 1) est actif, alors les variables doivent être déclarées avant d'être utilisées.

Vous pouvez aussi déclarer de multiples variables sur une même ligne:

Local $vVar_1, $vVar_2, $vVar_3


Et initialiser les variables:

Local $vVar_1 = 10, $vVar_2 = "20", $vVar_3 = 30



Créer des constantes peut être fait de manière similaire:

Const $CONST_1 = 1, $CONST_2 = 2, $CONST_3 = 3
Global Const $PI = 3.14, $MEANING_OF_LIFE = 42
Local Const $iApples = 500


Une fois créée, vous ne pouvez plus changer la valeur d'une constante. De même, vous ne pouvez pas changer une variable existante en constante.

Pour initialiser un tableau, spécifiez les valeurs de chaque élément à l'intérieur de crochets et séparées par une virgule. Pour un tableau à plusieurs dimensions, imbriquez les initialisations. Vous pouvez spécifier moins d'éléments dans l'initialisation que le nombre déclaré, mais pas davantage. Des appels de fonctions peuvent aussi être placées dans l'initialisation d'un tableau. Si une fonction retourne un tableau, alors le premier élément du tableau contiendra le nombre d'éléments du tableau retourné.

Local $aArray_1[12] = [3, 7.5, "string"], $aArray_1[5] = [8, 4, 5, 9, 1]
Local $aGrid[2][4] = [["Paul", "Jim", "Richard", "Louis"], [485.44, 160.68, 275.16, 320.00]]
Global $aTest[5] = [3, 1, StringSplit("Abe|Jack|Bobby|Marty", "|"), Cos(0)]


La différence entre Dim, Local and Global, est la portée dans laquelle elle est crée:
Dim = Portée Local si le nom de la variable n'existe pas déjà en Global (dans ce cas, la variable Global est réutilisée!)
Global = Force la création de la variable dans la portée Global
Local = Force la création d'une variable dans la portée Local/Function

Vous devriez utiliser Local ou Global à la place de Dim pour mentionner explicitement quelle portée est désirée pour une variable/constante/tableau.

Quand des variables sont utilisées, la portée Local est vérifiée en premier puis la portée Global ensuite.

Quand des tableaux sont créés, vous êtes limités à 64 dimensions et/ou un total de 16 millions d'éléments.

Une fonctionnalité unique dans AutoIt est la capacité de copier un tableau de cette manière:
$mycopy = $myarray
Dans ce cas, $mycopy sera une copie exacte de $myarray et aura les mêmes dimensions - aucune déclaration Dim est requise pour dimensionner le tableau préalablement. Si AutoItSetOption("MustDeclareVars", 1) est actif, alors la variable $mycopy doit être déclarée préalablement, mais il ne sera pas nécessaire de le dimensionner. Si la variable $mycopy était déjà un tableau ou une valeur quelconque, AutoIt l'écrasera avant que la copie ait lieu.

Pour écraser un tableau (peut-être parce que c'est un gros tableau global et que vous voulez libérer la mémoire), assignez lui une valeur simple:
$array = 0
Cela libèrera le tableau et le convertira en la valeur simple 0.

La déclaration d'un même nom de variable une nouvelle fois écrasera toutes les valeurs du tableau et réinitialisera les dimensions à la nouvelle définition. La déclaration d'une variable avec une valeur simple dans la même portée ne changera pas la valeur de la variable.

Si vous déclarez une variable avec le même nom qu'un paramètre en utilisant Local dans une fonction utilisateur, une erreur se produira. Global peut être utilisé pour assigner des variables globales à l'intérieur d'une fonction, mais si une variable locale (ou un paramètre) a le même nom que la variable globale, alors la variable locale sera la seule utilisée. Il est recommandé que les variables locales et globales utilisent des noms différents.

En relation

AutoItSetOption, UBound, ReDim, Static

Exemples

Exemple 1

; Exemple 1 - Déclare des variables
Local $i, $j = 23, $k
Global $g_fPI = 3.14159, $g_iRADIUS
Local $iDaysWorking = 5

; Exemple 2 - Déclare des tableaux
Global $g_aChessBoard[8][8]
Local $aStates[2], $aWindowsStats[4]

; Exemple 3 - Déclare des constantes
Const $iX1 = 11, $iY1 = 23, $iZ1 = 55
Global Const $PI = 3.14159, $E = 2.71828
Local Const $DAYS_WORKING = 5


Exemple 2

#AutoIt3Wrapper_Au3Check_Parameters=-q -d -w- 3 -w- 6 ; Déjà déclaré var = off, avertir lorsque vous utilisez Dim = off

#include <MsgBoxConstants.au3>

Dim $vVariableThatIsGlobal = "Ceci est une variable qui a une portée sur le programme comme Global."

MsgBox($MB_SYSTEMMODAL, "", "Un exemple où Dim pose plus de problèmes qu'il n'en résout.")

Example()

Func Example()
    ; Cela me ressemble, car il affiche le texte suivant: Il s'agit d'une variable qui a une portée sur le programme comme Global.
    MsgBox($MB_SYSTEMMODAL, "", $vVariableThatIsGlobal)

    ; Appelle la fonction aléatoire.
    Local $vReturn = SomeFunc()

    ; La variable Global ($vVariableThatIsGlobal) modifiée parce que j'avais totalement oublié que j'avais un nom de variable identique dans une autre fonction.
    MsgBox($MB_SYSTEMMODAL, $vReturn, "La variable a maintenant été modifiée: " & $vVariableThatIsGlobal)
EndFunc   ;==>Example

Func SomeFunc()
    ; Ce code crée une variable de portée Local si le nom de la variable n'existe pas déjà.
    ; Pour la commodité du raisonnement j'ai complètement oublié que j'ai déjà déclaré une variable avec le même nom.
    ; En fait, je veux que celle-çi soit modifiée dans la fonction et pas dans la variable au début du script.
    ; Ca devrait être OK, d'accord? Détrompez-vous.
    Dim $vVariableThatIsGlobal = ""

    For $i = 1 To 10
        $vVariableThatIsGlobal &= $i ; Cette ligne renverra 12345678910 en effaçant totalement le contenu précédent de $vVariableThatIsGlobal.
    Next
    Return $vVariableThatIsGlobal
EndFunc   ;==>SomeFunc