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

Обобщенные типы

В языке «1С:Предприятия» не использовались обобщенные типы.

Теперь в языке «Элемента» применяются обобщенные типы, чтобы типизировать элементы коллекций. То есть при объявлении коллекций указывается тип содержащихся в них элементов.

Зачем нужно типизировать содержимое коллекций?

Например, в языке «1С:Предприятия» было известно, что в метод придет массив чисел. Соответственно, алгоритм этого метода рассчитан на то, что в массиве числа. Но вдруг пришел массив, в котором есть строки, и на этом приложение выдаст ошибку во время выполнения.

Теперь же в языке «Элемента» в тексте программы указано, что массив должен состоять из чисел. И если компилятор обнаружит, что в какой-то ветке алгоритма в этом массиве появляются строки, он сразу же выдаст ошибку еще до начала выполнения приложения. Причем информация о типах-параметрах обобщенного типа сохраняется до времени выполнения приложения.

Например, объявляется массив, состоящий из чисел:

пер МассивЧисел: Массив<Число>

Это означает, что в массиве будут храниться числа. И уже не получится добавить в этот массив строки (МассивЧисел.Добавить("333")) – будет получена ошибка несоответствия типа аргумента.

Или, например, можно написать:

пер СуммаЧисел = 3 + МассивЧисел[0]

Компилятор поймет, что в массиве МассивЧисел только числа, и не потребует преобразования МассивЧисел[0] к числу.

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

// Создание экземпляра массива

пер МассивЧисел = новый Массив<Число>()

// Создание экземпляра соответствия

пер ЭтапыРаботы = новый Соответствие<Строка|Дата, Число|Строка>()

// Создание экземпляра множества

пер МножествоСДанными = новый Множество<Число|Строка>()

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

// Создание экземпляра массива с помощью литерала

пер Строки = ["один", "два", "три"]

// В следующий массив можно добавлять и числа тоже

пер ЧислаИСтроки = <Число|Строка>["один", "три"]

// Создание экземпляра соответствия с помощью литерала

пер КурсыВалют = {"RUB": 1, "BYN": 31.01}

// В качестве значения соответствия можно указывать еще и процент выполнения работы числом

пер СрокиРаботы = <Дата, Число|Строка>{Дата{2022-07-03} : "Выполнено", Дата{2022-08-15} : "Планируется"}

// Создание экземпляра множества с помощью литерала

пер МножествоСДанными = {1, 2, 3}

// В следующее множество можно добавлять и строки тоже

пер МножествоСДанными = <Число|Строка>{1, 2}

Тип элементов коллекций определяется следующим образом:

пер Массив1 = <Число>[1]

пер ТипМассива = Массив1.ПолучитьТип() // Тип: Массив<Число>

пер Массив2: ЧитаемыйМассив<Число>

Массив2 = [1]

ТипМассива = Массив2.ПолучитьТип() // Тип: ЧитаемыйМассив<Число>

пер Массив3 = [1, Истина]

ТипМассива = Массив3.ПолучитьТип() // Тип: Массив<Булево|Число>

Кроме того, можно создать пустую типизированную коллекцию с помощью пустого литерала. Например:

// Пустой массив

пер МассивСтрок = <Строка>[]

// Пустое соответствие

пер ЭтапыРаботы = <Строка, Число>{:}

// Пустое множество

пер МножествоЧисел = <Число>{}

Сравнение экземпляров обобщенных типов не учитывает параметры обобщенного типа. Например:

пер Соответствие1 = новый Соответствие<Объект, Объект>()

Соответствие1.Вставить(1, 2)

пер Соответствие2 = новый Соответствие<Число, Число>()

Соответствие2.Вставить(1, 2)

если Соответствие1 == Соответствие2

Сообщить("истина") //соответствия равны

;

Назад: Стандартные типы исключений
Дальше: Обобщенные системные методы