(495)240-8280ПН-СБ с 12:00 до 20:00
We speak English

5.1. Внутренние переменные

В главе 5 представлена классификация переменных с указанием их приоритетности для анализатора. Информация была предоставлена пользователем Cyrille; я лишь добавил в нее некоторые детали с надеждой на то, что так будет понятнее для всех. Рассмотрим переменные от самых приоритетных к менее приоритетным.

Существует два типа внутренних переменных. Первый тип ограничен областью действия. Эти переменные создаются внутри процедурной функции ("программы"; читайте далее). Они создаются и существуют только во время выполнения процедурной функции. После того, как выполнение функции было завершено, переменные утилизируются (предположительно удаляются). Точно также ограничены областью действия внутренние переменные, которые описаны как аргументы процедурной функции (смотри пример ниже). Это, по сути, те же самые внутренние переменные, которые описаны с помощью команды LOCAL внутри процедурной функции.

Второй тип - это внутренняя переменная, описанная вне процедурной функции, но внутри исходного файла. Эта внутренняя переменная используется всеми процедурными функциями, определенными в том же самом исходном файле. Эти переменные могут быть описаны либо с помощью команды LOCAL variablename, либо просто variablename. Главное, чтобы они были определены вне процедурного блока. Самым удобным местом для их определения будет верхняя часть (начало) исходного файла. Такая внутренняя переменная сохраняет свое содержимое, даже когда программа завершается.

Внутренние переменные недоступны для пользователя или других объектов, которые не определены внутри того же исходного файла. То есть если MyVar является такой внутренней переменной, а MyProg() - процедурной функцией (программой), и оба описаны/определены в одном и том же исходном файле, то MyProg может получить доступ к MyVar. Если другая процедурная функция MySecondProg() определена в другом исходном файле, то MyVar для нее будет недоступна.

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

LOCAL var1; // эту внутреннюю переменную могут использовать любые процедуры, определенные ниже этой строки кода
var1; // альтернативный вариант синтаксиса верхней строки (используйте либо первую, либо вторую!)

// в процедурной функции EXAMPLE ниже созданы три
// внутренние переменные: a, b и c. Они эквивалентны использованию
// команды LOCAL a, b, c; в качестве строки внутри процедурного блока,
// так как их область действия ограничена только командой EXAMPLE()

EXPORT EXAMPLE(a, b, c)
BEGIN
  LOCAL var2; // внутренняя переменная, чья область действия ограничена командой EXAMPLE

  var1 := 2; // var1 можно использовать в любой операции, определенной ниже описания var1
END;