Книга: «1С:Предприятие.Элемент». Возможности встроенного языка
Назад: Динамическая типизация
Дальше: Составные типы

Иерархия типов

В языке «1С:Предприятия» все типы были независимы друг от друга, между ними не существовало никаких связей.

Теперь в языке «Элемента» все типы имеют строгую иерархию. В основании иерархии типов лежит тип Объект. Этот тип является базовым для всех типов, кроме типа Неопределено.

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

Таким образом, если какой-то тип является потомком типа Обходимое, то значения такого типа можно обходить (например в цикле для…из). Если тип является потомком типа Сравнимое, то значения такого типа могут участвовать в операциях сравнения, и т. д.

Предка какого-либо типа также можно назвать его базовым типом, а потомка от него – производным типом. У одного типа может быть несколько базовых типов.

Для определения и сравнения типов, а также для получения информации о иерархии типов в языке «Элемента» существует специальный тип Тип. У каждого из производных типов существует метод ПолучитьТип(), который возвращает значение типа Тип.

Чтобы получить список базовых типов конкретного типа, у экземпляра типа Тип используется свойство БазовыеТипы. Например:

пер БазовыеТипы = СобратьПредков(Тип<Число>)

метод СобратьПредков(Значение: Тип, Предки: Множество<Тип> = {}): Множество<Тип>

для БазовыйТип из Значение.БазовыеТипы

Предки.Добавить(БазовыйТип)

СобратьПредков(БазовыйТип, Предки)

;

возврат Предки

;

У типа Число список базовых типов будет иметь вид (рис. 2.1):

Рис. 2.1. Список базовых типов у типа «Число»

У типа Булево список базовых типов будет иметь вид (рис. 2.2):

Рис. 2.2. Список базовых типов у типа «Булево»

У типа Массив<Число> список базовых типов будет иметь вид (рис. 2.3):

Рис. 2.3. Список базовых типов у типа «Массив<Число>»

Переменной базового типа можно присвоить значение производного типа, но обратное присваивание невозможно. Например:

пер Переменная1: Сравнимое<Число> = 33

пер Переменная2: Число = 11

Переменная1 = Переменная2

При вызове системного обобщенного метода в угловых скобках также можно опционально указать, что параметр метода может быть наследником определенного типа. В следующем примере указывается, например, что параметры метода Мин() могут быть только наследниками типа Сравнимое:

пер Переменная1 = Мин<Сравнимое<Число>>(11, 7, 13) // результат = 7

пер Переменная2 = Мин<Сравнимое<Строка>>("90", "66", "82") // результат = «66»

пер Переменная3 = Мин<Сравнимое<Булево>>(Ложь, Истина) // результат = false

подробнее

Подробнее про обобщенные методы будет рассказано в 3-й главе в разделе «».

Назад: Динамическая типизация
Дальше: Составные типы