Область действия переменных
Переменные могут передаваться в программы и процедуры не только списком фактических параметров, которые заменяются в них на формальные, но и непосредственно. Переменные, введенные в старшем модуле, существуют также во всех подчиненных модулях и могут быть в них обработаны нужным образом, т. е. специально параметры можно не передавать. Рассмотрим статус и область действия переменных.
Глобальные переменные.
Переменные и массивы, будучи объявленными как глобальные, имеют силу всюду в среде СУБД - во всех ее программах, подпрограммах и процедурах. Более того, они остаются в СУБД, даже если создавшая их программа закончена и удалена из памяти. Такие переменные объявляются командой
• PUBLIC <переменные> [,<массивы переменных>]
Например, команда
PUBLIC А, В, R(10), 2(2,6)
объявляет глобальными переменные А и В и массивы R и Z. Применение команды DIMENSION для объявления этих массивов больше не требуется. Подобный же эффект имеет использование имен переменных в командном окне. После выполнения, например, команд
А=3 &='КНИГА'
переменные А и В будут считаться глобальными (PUBLIC) и останутся в памяти в случае загрузки в нее программ, где могут быть изменены.
Этот эффект удобен, например, для раздельной отладки командных модулей. Предположим, что некоторый отлаживаемый модуль нуждается в данных, вырабатываемых другим модулем, который еще не существует или имеется, но мы не хотим тратить каждый раз вр^мя на его загрузку и исполнение. В этом случае лучше задать
исходные данные вручную в командном окне, и они остаются в памяти. Затем вызываем отлаживаемый модуль на исполнение, выявляем ошибки, запускаем его снова и т.д. При этом исходные данные для него всегда доступны.
Локальные переменные.
Переменные, объявляемые локальными (PRIVATE), существуют только в данном модуле и всех младших по отношению к нему модулях в моменты их вызова.
• PRIVATE <переменные>
Возможно объявление локальными групп переменных без их поименного перечисления.
• PRIVATE ALL LIKE/EXCEPT <маска>
Параметры LIKE и EXCEPT разъяснены ранее в команде SAVE. Команда PRIVATE применяется для временного (только внутри данной и подчиненных ей процедур) освобождения переменных, существующих в старших модулях или имеющих статус PUBLIC. При этом указанные переменные не уничтожаются, но делаются как бы невидимыми для данного модуля, и их имена могут быть использованы программистом по своему усмотрению. При выходе из' указанного модуля все PRIVATE-переменные утрачиваются, а старые переменные восстанавливаются.