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