Axiom Справочник языка

11 · Процедуры и функции

Модификаторы PUBLIC и PRIVATE

Когда файл подключён к программе через IMPORT, не всякое его объявление должно становиться доступным снаружи. Модификатор перед объявлением решает, увидит ли импортирующий модуль это имя: PUBLIC открывает его, PRIVATE оставляет внутри файла. Ниже приведены отдельные формы разных объявлений, а не одна общая инструкция.

Где ставится модификатор

Модификатор записывается перед объявлением верхнего уровня. Отсутствие модификатора равнозначно PRIVATE. Он не меняет длительность хранения переменной, правила BYVAL/BYREF или захвата внешних значений. Вложенные функции и методы TYPE не получают отдельного модификатора доступности.

Процедура

PUBLIC SUB name(parameters)
    statements
END SUB
PRIVATE SUB name(parameters)
    statements
END SUB

Функция

PUBLIC FUNCTION name(parameters) AS resultType
    statements
END FUNCTION
PRIVATE FUNCTION name(parameters) AS resultType
    statements
END FUNCTION

Тип

PUBLIC TYPE name
    fields
END TYPE
PRIVATE TYPE name
    fields
END TYPE

Переменная

PUBLIC DIM name AS dataType = initialValue
PRIVATE DIM name AS dataType = initialValue

Константа

PUBLIC CONST name AS dataType = value
PRIVATE CONST name AS dataType = value

Параметры и действие

name — имя объявления. parameters — обычный список параметров SUB или FUNCTION; resultType — тип результата функции. fields — объявления полей TYPE. dataType и начальные значения подчиняются правилам DIM и CONST. Модификатор не вводит новых типов или преобразований аргументов. Для других поддерживаемых форм DIM и CONST он также ставится перед соответствующим оператором.

PUBLIC делает объявление видимым после IMPORT своего модуля. PRIVATE не удаляет данные и не запрещает возврат записи или функционального значения из открытой функции.

Разницу показывает один файл: константа остаётся закрытой, а функция, которая ею пользуется, открыта.

PRIVATE CONST factor AS INTEGER = 2
PUBLIC FUNCTION Twice(value AS INTEGER) AS INTEGER
    RETURN value * factor
END FUNCTION
PRINT Twice(3)

Этот однофайловый пример печатает 6. При импорте файла доступна функция Twice, но не имя factor.

Правила и диагностика

Модификатор допустим только перед DIM, CONST, SUB, FUNCTION или TYPE верхнего уровня. Неверное расположение или отсутствие объявления даёт синтаксическую диагностику MB1001/MB1002. Внешнее обращение к закрытому имени даёт MB2053. Повторные объявления и конфликты имён сохраняют обычные диагностики MB2002, MB2016 и MB2055. PUBLIC CONST остаётся константой: передача в BYREF запрещена.

См. также

IMPORT · SUB · FUNCTION · TYPE · DIM · CONST