Ключевое слово Static

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

Внимание: эта возможность присутствует только для теста. Она может не работать, содержать баги и может быть изменена в будущем без какого-либо предварительного уведомления.

НЕ ПРИСЫЛАЙТЕ СООБЩЕНИЯ ОБ ОШИБКАХ ИЛИ ПРОСЬБЫ ОБ ИЗМЕНЕНИИ ФУНКЦИОНАЛА.

ИСПОЛЬЗУЙТЕ НА СВОЙ СТРАХ И РИСК.

Static

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

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

Параметры

Scope Опция модификатор, Local или Global, которая указывает область видимости переменной.
$variable Имя объявляемой static переменной.
initializer Значение, которое изначально присваивается переменной. Это может быть вызываемая функция, включая математические или строковые операции. Инициализация вычисляется только в первый раз, когда встречается объявление переменной.
subscript Число элементов в измерении при создании массива. Получаемые индексы от 0 до n-1.

Примечания

Ключевое слово Static может оказаться перед опциональным спецификатором scope, или после, например Local Static или Static Local оба варианта приемлемы.

Если используется модификатор области видимости Local, то static переменная видна и используется только в функции, в которой она была объявлена. Если используется модификатор области видимости Global, то static переменная видна и используется во всех частях скрипта; в этом отношении Global Static имеет очень мало отличия от Global переменной. Если модификатор области видимости не используется, то static переменная будет создана в локальной области видимости, в этом случае Static похож на Dim.

Различия между Local и Static переменными - время их существования. Локальные переменные хранятся только пока выполняется функция и видны только внутри функции, в которой они были объявлены; когда функция завершается, все её локальные переменные освобождаются. Static переменные также являются видимыми только в функции, в которой они были объявлены, но они продолжают существовать, храня своё последнее значение после завершения выполнения функции. При обращении к переменным сначала проверяется локальная область видимости, затем глобальная.

Ключевое слово Static выполняет действия аналогично Global/Local/Dim.
  1. Все они объявляют переменную перед её использованием.
  2. Все они могут создать массив.

Примечание: Static переменные должны быть объявлены с помощью ключевого слова Static до их использования, независимо от установки AutoItSetOption("MustDeclareVars"). Static переменные не могут быть Const.

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

Static $a, $b, $c

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

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


При инициализации static переменной, значение инициализации вычисляется и присваивается только в первый раз, при создании переменной. На всех последующих этапах инициализация игнорируется.

Смотрите Local для более подробной информации об использовании массивов, которые имеет все те же функциональные возможности, что и Local, за исключением:
  1. Переинициализация Static переменной не имеет эффекта, игнорируется.
  2. Изменение размера Static массива рассматривается как ReDim.
  3. Вы не можете изменить static переменную в локальную или глобальную переменную и наоборот.

Если вы хотите изменить размер массива, всегда используйте для этого Static, а не ReDim.

См. также

Local, UBound, ReDim, AutoItSetOption

Пример

; Вызов функции примера для инициализации Static переменной в локальной области видимости.
Example()

; Вызов функции примера второй раз показывает, что переменная  сохраняет данные, которые были присвоены ей.
Example()

Func Example()
    Local Static $sString = "Это строка текста, которая объявляется с помощью Static переменной в локальной области." & @CRLF & @CRLF & "Переменная $sString теперь будет видна только этой функции пока скрипт не будет завершён."
    MsgBox(4096, "", $sString)
    $sString = "При использовании только локальной области видимости эта строка не будет видна, если эта функция вызывается несколько раз, но так как мы используем ключевое слово Static, то переменная $sString сохранит последние данные вложенные в неё."
EndFunc