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

Структура

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

Товар = Новый Структура("Наименование, Артикул, Цена", "Холодильник", "М50", 5300);

Товар.Наименование = "Утюг";

Товар.Цена = "хорошая";

Товар = Новый Структура("Вес, Рост", 80, 180);

Заранее в таком типе не было никаких ключей. Такую структуру было неудобно использовать, особенно в разных местах кода. Например, если в одном из мест вы решили добавить в структуру новое поле, то потом было сложно поддерживать ее актуальность.

Теперь в языке «Элемента» вы можете с помощью инструкции структура создать собственный тип данных и указать, например, что в этой структуре будут два поля: Фамилия и Оценка. Это будет тип Студент. А также можете создать другую структуру типа Адрес с полями Город, Улица, Дом и т. п.

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

структура Товар

знч Наименование: Строка

пер Артикул: Строка

пер Цена: Число

конструктор(Наименование)

конструктор(Наименование, Артикул, Цена)

;

метод МойМетод()

пер ПервыйТовар = новый Товар("Холодильник", "М50", 5300)

пер ВторойТовар = новый Товар("Пылесос")

ВторойТовар.Артикул = "VC20"

ВторойТовар.Цена = 5000

;

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

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

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

Имена полей должны соответствовать общим требованиям к именам языка. Они должны быть уникальны в рамках одной структуры. Поле структуры не может иметь тип самой определяемой структуры.

Значение инициализации описывает, какое значение будет принимать поле структуры при создании объекта. В качестве инициализатора может выступать любое выражение, которое вычислимо во время компиляции. Например:

структура Сотрудник

знч ФИО: Строка

знч Возраст: Число = 33

конструктор (ФИО)

конструктор (ФИО, Возраст)

;

метод МойМетод()

пер Директор = новый Сотрудник("Иванов") //Директор = {ФИО=Иванов, Возраст = 33}

;

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

Конструкторов может быть несколько. Они должны отличаться числом аргументов.

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

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

структура Сотрудник

знч ФИО: Строка

знч Возраст: Число

конструктор (ФИО)

конструктор (ФИО, Возраст)

;

метод МойМетод()

пер Менеджер = новый Сотрудник(Возраст = 22, ФИО = "Мохов")

;

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