Видимость имен
Под видимостью имен подразумевается доступность той или иной сущности языка по ее идентификатору (имени) в данной части исходного текста.
Из соображений простоты языка не предусмотрены специальные средства управления видимостью имен. Однако это повышает вероятность конфликта имен, т.е. наличия более одной сущности с одинаковым именем и приоритетом видимости. Приоритет видимости имен для глобальных объявлений низкий, а для локальных - высокий. Имена типов образуют отдельное пространство имен, не конфиликтующее с другими.
В пространство имен типов попадают:
- имена объектных типов;
- имена интерфейсов;
- синонимы типов.
В глобальное пространство имен попадают следующие объявления:
В локальное пространство имен попадают следующие объявления:
- локальные константы;
- локальные переменные, включая имена параметров;
- поля (только в теле метода);
- методы (только в теле метода).
Вне тела метода или константы объектного типа доступ к полям и методам происходит через точку, разделяющую выражение объектного типа и имя поля или метода. Аналогично происходит обращение к методам интерфейсов.
Синтаксис:
<экземпляр>.<имя поля или метода>
Пример:
ПЕРЕМ ССЫЛКА: с с.код = "Контрагенты/СПР/1" // обращение к полю "код" с.СЧИТАТЬ // вызов метода "СЧИТАТЬ"
Имена из локального пространства имен могут совпадать с именами в глобальном пространстве имен. При этом совпадающие имена из глобального пространства становятся недоступными в пределах действия данного локального пространства имен. Для явного использования имени из глобального пространства перед ним указывается точка.
Синтаксис:
.<глобальное имя>
Пример
Явное обращение к глобальной функции:
// некий тип А, имеющий метод Ф ТИП А [ ФУНКЦИЯ Ф(СТРОКА: текст) .Ф(текст) // вызов глобальной функции Ф, а не рекурсивно метода Ф КОНЕЦ_ФУНКЦИИ ] // глобальная функция Ф ФУНКЦИЯ Ф(СТРОКА: текст) СООБЩЕНИЕ(текст) КОНЕЦ_ФУНКЦИИ
Существует риск изменить в функции значение глобальной переменной, полагая, что объявлена новая локальная переменная. Неявное объявление переменных разрешено только для переменных-счетчиков циклов ДЛЯ и ИНДЕКС (а также при использовании соотвествующей опции совместимости). Неявное объявление переменных затрудняет понимание исходного кода и затрудняет его сопровождение.
Пример
Непредвиденное изменение глобальной переменной:
// Глобальная переменная "и". // Может быть объявлена где-то далеко, в другой библиотеке. ПЕРЕМ и = 0; ФУНКЦИЯ Пример // Функция изменяет значение глобальной переменной "и". // Скорее всего, разработчик функции не ожидал такого эффекта // и полагал "и" локальной переменной ЦИКЛ ДЛЯ (и = 1, 100) //... КОНЕЦ_ЦИКЛА КОНЕЦ_ФУНКЦИИ
Для минимизации риска непредвиденного изменения глобальных переменных необходимо следовать соглашению об именовании, принятому в коллективе разработчиков. Также следует избегать объявления чрезмерного количества глобальных переменных.