# Keyword Reference

Dim / Global / Local / Const

Declare a variable, a constant, or create an array.

Dim [Const] $variable [ = initializer ]
Dim [Const] $array[subscript 1]...[subscript n] [ = initializer ]

Parameters

const | [optional] If present, the Const keyword creates a constant rather than a variable.
$variable | The name of the variable to declare.
initializer | The value that will be initially assigned to the variable. A Const must include the initializer. The initializer can be a function call.
subscript | The number of elements to create for the array dimension, indexed 0 to n-1.

Remarks

The Dim/Local/Global keywords perform similar functions:
1. Declare a variable before you use it (similar to VBScript)
2. Create an array
Note: In AutoIt you can create a variable simply by assigning a value ($myvar = 0) but many people like to explicitly declare them. If AutoItSetOption("MustDeclareVars", 1) is active, then variables must be Dim'ed.
You can also declare multiple variables on a single line:

Dim $a, $b, $c

And initialize the variables:

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

Creating constants can be done in a similar way:

Const $a = 2, $b = 10, $c = 20
Dim Const $d = 21, $e = Exp(1)
Local Const $f = 5, $g = 7, $h = -2

Once created, you cannot change the value of a constant. Also, you cannot change an existing variable into a constant.
To initialize an array, specify the values for each element inside square brackets, separated by commas. For multiple dimensions, nest the initializers. You can specify fewer elements in the initializer than declared, but not more. Function calls can also be placed in the initializers of an array. If the function call returns an array, then the one array element will contain that array.

Dim $Array1[12]=[3, 7.5, "string"], $array[5] = [8, 4, 5, 9, 1]
Dim $Grid[4][4]=[["Paul", "Jim", "Richard", "Louis"], [485.44, 160.68, 275.16, 320.00]]
Dim $Test[5] = [3, 1, StringSplit("Abe|Jack|Bobby|Marty", "|"), Cos(0)]

The difference between Dim, Local and Global is the scope in which they are created:
Dim = Local scope if the variable name doesn't already exist globally (in which case it reuses the global variable!)
Global = Forces creation of the variable in the Global scope
Local = Forces creation of the variable in the Local/Function scope
When using variables, the local scope is checked first and then the global scope second.
When creating arrays you are limited to up to 64 dimensions and/or a total of 16 million elements.
A unique feature is the ability to copy arrays like this:
$mycopy = $myarray
In this case $mycopy will be an exact copy of $myarray and will have the same dimensions - no Dim statement is required first. If the variable $mycopy was already an array or value it will be erased before the copy takes place.
To erase an array (maybe because it is a large global array and you want to free the memory), simply assign a single value to it:
$array = 0
This will free the array and convert it back to the single value of 0.
Dim'ing the same variable name again will erase all values and reset the dimensions to the new definition.
If you declare a variable with the same name as a parameter, using Local inside a user function, an error will occur. Global can be used to assign global variables, but if a local variable (or parameter) has the same name as a global variable, the local variable will be the only one used. It is recommended that local and global variables have distinct names.

Related

UBound, ReDim

Example

; Example 1 - Declaring variables
Dim $x, $y = 23, $z
Global $_PI = 3.14159, $RADIUS
Local $_daysWorking = 5
; Example 2 - Declaring arrays
Dim $weeklyWorkSchedule[$_daysWorking]
Global $chessBoard[8][8]
Local $mouseCoordinates[2], $windowStats[4]
; Example 3 - Declaring constant variables
Const $x1 = 11, $y1 = 23, $z1 = 55
Global Const $PI = 3.14159, $E = 2.71828
Local Const $daysWorking = 5