Global
Global[.<type>] <variable[.<type>]> [= <expression>] [, ...]
Описание
Ключевое слово Global позволяет объявлять глобальные переменные, т.е. переменные которые объявили в основном коде, но которые становятся доступными в Процедурах. В этом случае команда Global должна быть вызвана для соответствующих переменных перед объявлением процедуры. Это правило верно везде, кроме одного случая: модули не имеют доступа к глобальным переменным объявленным вне этого модуля.
Допускается объявлять сразу несколько переменных в одной строке через запятую. В этом случае с помощью суффикса (<type> после слова Global) можно указать тип по умолчанию для переменных в этой строке, он сработает, если для какой либо из них тип не указан индивидуально. Если тип по умолчанию для объявления не указан, будет использован тип Integer.
Ключевое слово Global также может использоваться с Массивами, Связными списками и Хеш-картами.
Чтобы в процедуре использовать локальные переменные, имена которых совпадают с именами глобальных переменных, используйте ключевые слова Static и Protected.
Более подробно про переменные, объявления, типы данных и области видимости можно почитать здесь.
Пример: С переменными
Global a.l, b.b, c, d = 20 Procedure Change() Debug a ; Будет 10, поскольку переменная является глобальной EndProcedure a = 10 Change()
Пример: С массивом
Global Dim Array(2) Procedure Change() Debug Array(0) ; Будет 10, так как массив является глобальным EndProcedure Array(0) = 10 Change()
Пример: С типом по умолчанию
; 'Angle' and 'Position' будут типа float, так как для них индивидуально тип не указан ; Global.f Angle, Length.b, Position
Пример: Комплекс с модулем
Global Var_GlobalOutsideModule = 12 Debug Var_GlobalOutsideModule ; Отобразит 12 DeclareModule Ferrari Global Var_GlobalModule = 308 #FerrariName$ = "458 Italia" Debug #FerrariName$ ; Отобразит "458 Italia" ; Debug Var_GlobalOutsideModule ; Ошибка, переменная уже существует Debug Var_GlobalModule ; Отобразит 308 Declare CreateFerrari() EndDeclareModule ; Частное ; --------------------------------------------------------------------------------------- Module Ferrari Debug Var_GlobalOutsideModule ; Отобразит 0 <== Look ! Debug Var_GlobalModule ; Отобразит 308 Global Initialized = 205 Debug Initialized ; Отобразит 205 Procedure Init() Debug Var_GlobalOutsideModule ; Отобразит 0 Debug Var_GlobalModule ; Отобразит 308 Debug "InitFerrari()" EndProcedure Procedure CreateFerrari() ; Общедоступно Init() Debug "CreateFerrari()" Debug Var_GlobalOutsideModule ; Отобразит 0 Debug Var_GlobalModule ; Отобразит 308 EndProcedure EndModule ; Главный код ; --------------------------------------------------------------------------------------------- Procedure Init() Debug " init() from main code." Debug Var_GlobalOutsideModule ; Отобразит 12 Debug Var_GlobalModule ; Отобразит 0 EndProcedure Init() Ferrari::CreateFerrari() Debug Ferrari::#FerrariName$ ; Отобразит 458 Italia Debug Var_GlobalOutsideModule ; Отобразит 12 ; Debug Var_GlobalModule ; Error, the variable already exists UseModule Ferrari CreateFerrari() Debug #FerrariName$ ; Отобразит 458 Italia Debug Var_GlobalOutsideModule ; Отобразит 12 Debug Var_GlobalModule ; Отобразит 308 <== Look ! UnuseModule Ferrari ; Debug #FerrariName$ ; Error, does not exist Debug Var_GlobalOutsideModule ; Отобразит 12 Debug Var_GlobalModule ; Отобразит 0 <== Look !