Структура
Общее описание
Структура представляет собой тип, имеющий фиксированный набор полей и методов, а также конструктор. Каждое поле имеет тип, указанный при разработке структуры. Структура может содержать данные, а также описания методов. После описания структуры ее можно использовать в программах наряду с другими типами данных.
Синтаксис
Синтаксис объявления структуры:
структура имя-структуры
[модификатор-обязательности модификатор имя-поля: тип-поля[ = значение-инициализации]]
[модификатор-обязательности модификатор имя-поля: тип-поля[ = значение-инициализации]]
[модификатор-обязательности модификатор имя-поля: тип-поля[ = значение-инициализации]]
...
[конструктор]
...
[метод]
[метод]
;
-
структура
Ключевое слово, с помощью которого объявляется структура.
-
имя-структуры
имя-структуры указывает имя описываемой структуры (имя типа). С помощью этого имени в дальнейшем будет происходить использование создаваемой структуры, например, создание переменной с типом структуры. Имя должно удовлетворять общим требованиям к именам в языке.
-
модификатор-обязательности
Ключевое слово
обз
, которым обозначаются обязательные поля конструктора. Поля, не отмеченные данным модификатором, являются необязательными. Если значение данных полей не задано при инициализации структуры, в качестве значения будет использоваться значение по умолчанию типа или конструктор типа без параметров (если тип не составной). Если у типа отсутствует значение по умолчанию, и значение по умолчанию не задано разработчиком явно, а также не указан признак обязательности, будет ошибка. -
модификатор
Каждое поле структуры объявляется аналогично обычной переменной в модуле. Оно начинается с ключевого слова
пер
илизнч
, затем следует имя поля, его тип и необязательное значение инициализации. Имена полей должны соответствовать общим требованиям к именам языка.дополнительноПоле структуры не может быть описано таким образом, чтобы у него был тип самой определяемой структуры. Другими словами, не допускается рекурсивное объявление типа поля.
Имена полей должны быть уникальны в рамках одной структуры.
Если описание поля структуры начинается с модификатора
пер
, то значение такого поля может быть изменено путем присваивания значения. Если описание поля структуры начинается с модификаторазнч
, то для такого поля значение может быть установлено только во время создания экземпляра структуры с помощью конструктора. -
значение-инициализации
Описывает, какое значение будет принимать поле при создании экземпляра. В качестве значения инициализации может выступать любое выражение, которое вычислимо во время компиляции. Если для поля не задано явное значение инициализации по умолчанию, то используется значение по умолчанию типа или конструктор типа без параметров (если тип не составной). Если у типа отсутствует значение по умолчанию и разработчиком не задано значение по умолчанию для поля явно, а также не указан признак обязательности, будет ошибка.
-
конструктор
По умолчанию для структуры создается автоматический конструктор, который включает в себя все поля структуры в том порядке, в котором они описаны в самой структуре. Для настройки конструктора используется ключевое слово
конструктор
, которое в структуре может указываться только один раз. Перед этим ключевым словом могут быть размещены аннотации, которые будут использоваться для настройки конструктора (например,@ИменованныеПараметры
). Видимость конструктора соответствует видимости структуры и не может быть изменена.Пример:
структура МояСтруктура
пер СтроковоеПоле: Строка
пер ЧисловоеПоле: Число
@ИменованныеПараметры
конструктор
; -
метод
Метод структуры — это функция, которая принадлежит структуре и позволяет выполнять различные действия над ее экземплярами или над ней самой. Методы могут быть:
- Простыми — для работы с экземплярами структуры. Имеют доступ к полям структуры.
- Статическими — для работы со структурой в целом. Не требуют создания экземпляра структуры. Для объявления используется ключевое слово
статический
.
Примеры методов:
структура Продажа
обз пер Товар: Строка
обз пер Дата: Дата
// Простой метод
метод ВСтроку(): Строка
возврат Товар + " " + Дата
;
// Статический метод
статический метод ИзСтроки(СтрокаПродажи: Строка): Продажа
знч Части = СтрокаПродажи.Разделить(" ")
возврат новый Продажа(Части[0], новый Дата(Части[1]))
;
;
Работа со структурой
Очевидно, что первым шагом к использованию собственного типа данных является описание этого типа. Рассмотрим простой пример данных, которые могут быть востребованы в языке: сохранить информацию о каком-либо файле. Допустим, нам необходимо хранить о файле следующую информацию:
- имя файла;
- тип файла — исполняемый или неисполняемый;
- полный путь к файлу;
- размер файла.
Для этого создадим следующую структуру: