PureBasic

Static


Синтаксис
Static[.<type>] <variable[.<type>]> [= <constant expression>] [, ...]

Описание


Ключевое слово Static позволяет создавать локальную долгоживущую (статичную) переменную в Процедуре, даже если та же переменная была объявлена как Глобальная в основной программе. Если после ключевого слова Static указывается тип, то для этого объявления тип используемый по умолчанию изменяется на указанный. Static может также использоваться с Массивами, Связными списками и Хеш-картами. При объявлении статичного массива, параметр размерности должен быть постоянным значением.

Значение статичной переменной не обнуляется при каждом вызове процедуры, следовательно, можно использовать локальные переменные, параллельно с глобальными переменными (с тем же самым именем), и обе сохранят свои значения. Каждой переменной может быть присвоено значение по умолчанию, непосредственно назначенное ей, но оно должно быть постоянным значением, то есть число или константа а не значение другой переменной.

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

Более подробно про переменные, объявления, типы данных и области видимости можно почитать здесь.

Пример: С переменной

Global a
a = 10

Procedure Change()
    Static a
    a+1
    Debug "In Procedure: "+Str(a) ; Распечатает 1, 2, 3, поскольку переменная постепенно увеличивается при каждом вызове процедуры.
EndProcedure

Change()
Change()
Change()
Debug a ; Распечатает 10, поскольку статическая переменная не влияет на глобальный.

Пример: С массивом

Global Dim Array(2)
Array(0) = 10

Procedure Change()
    Static Dim Array(2)
    Array(0)+1
    Debug "In Procedure: "+Str(Array(0)) ; Распечатает 1, 2, 3 как значение полевых инкрементов массива при каждом вызове процедуры.
EndProcedure

Change()
Change()
Change()
Debug Array(0) ; Распечатает 10, поскольку статический массив не влияет на глобальный.

Пример: С несколькими процедурами

Procedure Foo()
    Static x = 100  ; объявление и присвоение выполняется только один раз при запуске программы.

    Debug x
    x + 1
EndProcedure

Foo() ; Отобразит 100
Foo() ; Отобразит 101
Foo() ; Отобразит 102

Debug "---"

Procedure Bar()
    Static x  ; объявление делается только один раз при запуске программы.
    x = 100      ; присваивание выполняется при каждом вызове процедуры.

    Debug x
    x + 1
EndProcedure

Bar() ; Отобразит 100
Bar() ; Отобразит 100
Bar() ; Отобразит 100