Руководство разработчика

Синонимы типов

Синонимы типов позволяют создавать собственные пользовательские типы. Тип и его синоним полностью идентичны, можно пользоваться как одним так и другим. У типа может быть сколько угодно синонимов. Использование синонимов типов может упростить длинные неудобные имена типов могут, заменяя в данной программе их коротким эквивалентом, что облегчает понимание сложных имен типов и упростить восприятие программного кода. Определение синонима для контейнерного типа позволяет не дублировать его полное описание в объявлении параметров функций и при объявлении индексных переменных. Синонимы могут использоваться для стандартных типов с целью само документирования исходных текстов, указания смысла строк, чисел и т.д. Синонимы типов базируются на основных типах данных:

Для объявления синонима типа ключевое слово ТИП используется совместно со знаком "равно" вне объявления типа и тела функции или метода.

Синтаксис:

Объявление альтернативного имени типа:

ТИП <имя типа> = <другое имя типа>;

Задание имени для контейнерного типа:

ТИП <имя типа> = ИНДЕКС <тип элемента>: @[<список типов индексов>];

Уже было отмечено, что синонимы типов базируются на различных типах данных точнее, на все и на любые виды объектов, являющиеся данными в программе. Но такими же объектами, как и традиционные объекты данных, являются функции в программе. Поэтому синонимы типов применимы к функциям.

Задание имени для типа функции:

Отметим, что формальные параметры в синониме типа на функцию описываются так же, как и в обычных функциях. При присваивании синонима типа для функции требуется точное соответствие типа функции и типа присваиваемого значения. Правила передачи параметров одинаковы и для обычного вызова, и для вызова с помощью синонима типа.

ТИП <имя типа> = ФУНКЦИЯ [<тип результата>:] @[<список параметров>];

Задание имени для синонима типа:

ТИП <синоним типа> = <другой синоним типа>;

Точка с запятой после объявления синонима обязательна.

Пример:

ТИП Номер = ЦЕЛОЕ;
ТИП Фамилия = СТРОКА;
ТИП Список = ИНДЕКС Фамилия: @[ЦЕЛОЕ];


ФУНКЦИЯ Фамилия: Печать1(Список:сп)
  РЕЗУЛЬТАТ = "Список сотрудников " + СТР(сп)
  СООБЩЕНИЕ(РЕЗУЛЬТАТ)
КОНЕЦ_ФУНКЦИИ

ФУНКЦИЯ Фамилия: Печать2(Список: сп)
  РЕЗУЛЬТАТ = "Список сотрудников " + СТР(сп)
  СООБЩЕНИЕ(РЕЗУЛЬТАТ)
КОНЕЦ_ФУНКЦИИ

ТИП ПолучитьФамилию = ФУНКЦИЯ Фамилия: @(Список: сп);

ВЫЧИСЛИТЬ
  ПЕРЕМ Номер: х = 10
  ПЕРЕМ Список: у
  у[1] = "Иванов"
  ОТЛАДКА(х)
  ПЕРЕМ ПолучитьФамилию: н
  н = Печать1
  н(у)
  ОТЛАДКА(н)
  н = Печать2
  н(у)
  ОТЛАДКА(н)
  н = НОЛЬ
  ОТЛАДКА(н)
КОНЕЦ

Задание имени для типа интерфейса:

ТИП <синоним типа> = <имя интерфейса>;

Пример:

ИНТЕРФЕЙС Инт1 
[
  ФУНКЦИЯ м1;
]

ТИП Выводсообщения = Инт1;

ТИП Об1 ( Инт1) 
[
  СТРОКА: данные;
  ФУНКЦИЯ м1 
    СООБЩЕНИЕ("м1")
  КОНЕЦ_ФУНКЦИИ	
]

ВЫЧИСЛИТЬ
  ПЕРЕМ Об1:д;
  ПЕРЕМ Выводсообщения: вв = д
  вв.м1
  ОТЛАДКА(вв)
КОНЕЦ

Компилятор не использует указанный тип при обнаружении синонима. Для компилятора использование синонима типа эквивалентно использованию оригинального имени типа. Синонимы типов, имена интерфейсов и имена типов образуют единое пространство имен, в котором повторы не допускаются. При использовании синонимов типов поддержка времени выполнения отсутствует.


См. также: