Ключевое слово Dim / Global / Local / Const

         Описание ключевого слова


Dim / Global / Local / Const

Объявляют переменную, константу или создают массив.

Local [Const] $variable [ = initializer ]
Local [Const] $array[subscript_1]...[subscript_n] [ = initializer ]

Параметры

Const [необязательный] Если указано, будет создана константа, а не переменная.
$variable Имя переменной/константы для создания.
initializer Первоначальное значение, присваиваемое переменной. Обязательно для константы. Может являться вызовом функции.
subscript Число элементов в измерении при создании массива. Получаемые индексы от 0 до n-1.

Примечания

Ключевые слова Dim/Local/Global выполняют схожие функции:
1. Объявляют переменную перед её использованием (схоже с VBScript)
2. Создают массив

Примечание: в AutoIt можно создавать переменные, просто присваивая им значения ($myvar = 0), но многие люди предпочитают сначала явно объявить их. Если опция AutoItSetOption("MustDeclareVars", 1) активна, переменные должны быть объявлены перед использованием.

Также, можно объявить несколько переменных в одной строке:

Local $a, $b, $c

И инициализировать их (присвоить начальное значение):

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


Константы создаются аналогичным образом:

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

После создания, невозможно изменить значение константы. Также, невозможно преобразовать существующую переменную в константу.


Для инициализации массива, в квадратных скобках следует указать значения всех элементов, разделённые запятыми. Для многомерных массивов необходимо использовать вложенную инициализацию. Можно указать меньше значений, чем объявлено (но не больше). Вызов функции также может быть инициализирующим значением. Если вызываемая функция возвращает массив, то один элемент массива будет содержать весь возвращённый массив.

Local $Array1[12]=[3, 7.5, "строка"], $array[5] = [8, 4, 5, 9, 1]
Local $Grid[2][4]=[["Маша", "Витя", "Ольга", "Сергей"], [485.44, 160.68, 275.16, 320.00]]
Local $Test[5] = [3, 1, StringSplit("Один|Два|Три|Четыре", "|"), Cos(0)]


Разница между Dim, Local и Global состоит в том, в какой области видимости они создают переменные:
Dim = Создаёт переменную в локальной области видимости, если ещё не существует глобальной переменной с таким же именем (в этом случае глобальная переменная будет использована снова!)
Global = Принудительно создаёт переменную в глобальной области видимости
Local = Принудительно создаёт переменную в локальной области видимости (внутри функций)

При использовании переменных сначала проверяется локальная область видимости, а затем - глобальная.

При создании массивов существует ограничения: максимум 64 измерения и/или не более 16 миллионов элементов.

Уникальной возможностью AutoIt является возможность копировать массивы:
$mycopy = $myarray В этом случае $mycopy будет являться точной копией $myarray и иметь такое же количество измерений - нет нужды предварительно использовать Dim для указания необходимого размера. Если опция AutoItSetOption("MustDeclareVars", 1) активна, переменная $mycopy всё равно должна быть предварительно объявлена (но указывать необходимые размеры не нужно). Если переменная $mycopy уже является массивом или одиночным значением, она будет очищена перед копированием.

Чтобы очистить массив (например, это большой глобальный массив и необходимо освободить память), можно просто присвоить ему одиночное значение:
$array = 0
Это очистит массив и преобразует его в одиночное значение 0.

Объявление переменной с тем же именем очистит все элементы массива и изменит число измерений к указанному. Объявление переменной базового типа в той же области видимости не изменит значение переменной.

Использование Local внутри пользовательской функции для объявления переменной с тем же именем, что и параметр, вызовет ошибку. Global может быть использовано для присвоения значений глобальным переменным внутри функций, однако, если локальная переменная (или параметр) имеет такое же имя, что и глобальная переменная, внутри функции можно будет работать только с локальной переменной. Поэтому рекомендуется, чтобы локальные и глобальные переменные имели различные имена.

См. также

UBound, ReDim, Static, AutoItSetOption

Пример

; Пример 1 - Объявление переменных
Dim $x, $y = 23, $z ; Dim используется для объявления уже существующих переменных
Global $_PI = 3.14159, $RADIUS
Local $_daysWorking = 5

; Пример 2 - Объявление массивов
Dim $weeklyWorkSchedule[$_daysWorking]
Global $chessBoard[8][8]
Local $mouseCoordinates[2], $windowStats[4]

; Пример 3 - Объявление констант
Const $x1 = 11, $y1 = 23, $z1 = 55
Global Const $PI = 3.14159, $E = 2.71828
Local Const $daysWorking = 5

; Пример 4 - Объявление массивов с присвоением
#include <Array.au3> ; для просмотра массивов

Local $aArray[2] = ['Элемент1', 'Элемент2']
_ArrayDisplay($aArray, "Простой пример")

Dim $aArray[8] = [0] ; не обязательно присваивать все элементы массива
_ArrayDisplay($aArray, "Частичное присвоение")

Dim $aArray[10][3] = [['э0'],['э1'],['э2', 'ю2'],['э3', '', 'я3'],['э4'],[''],['', 'ю6']] ; аналогично для двумерного массива
_ArrayDisplay($aArray, "Частичное присвоение")

Dim $aArray[3][2] = [[1, 2],[3, 4],[5, 6]] ; 3 строки, 2 колонки
_ArrayDisplay($aArray, "3 строки, 2 колонки")

Dim $aArray[2][3] = [[1, 2, 3],[4, 5, 6]] ; 2 строки, 3 колонки
_ArrayDisplay($aArray, "2 строки, 3 колонки")