Структура
Общее описание
Структура представляет собой тип, имеющий фиксированный набор полей и конструкторов. Каждое поле имеет тип, указанный при разработке структуры. Структура может содержать только данные и не может содержать описания методов. После описания структуры, ее можно использовать в программах наряду с другими типами данных.
Синтаксис объявления структуры:
структура имя-структуры [модификатор имя-поля: тип-поля[ = значение-инициализации]] [модификатор имя-поля: тип-поля[ = значение-инициализации]] [модификатор имя-поля: тип-поля[ = значение-инициализации]] ... [конструктор()] [конструктор(имя-поля-1)] ... ;
- имя-структуры
- имя-структуры указывает имя описываемой структуры (имя типа). С помощью этого имени в дальнейшем будет происходить использование создаваемой структуры, например, создание переменной с типом структуры. Имя должно удовлетворять общим требованиям к именам в языке.
- модификатор
- Каждое поле структуры объявляется аналогично обычной переменной в модуле. Оно начинается с ключевого слова пер
или знч, затем следует имя поля, его тип и необязательное значение инициализации. Имена полей должны
соответствовать общим требованиям к именам языка. Важно: Поле структуры не может быть описано таким образом, чтобы у него был тип самой определяемой структуры. Другими словами не допускается рекурсивное объявление типа поля.
- значение-инициализации
- Описывает, какое значение будет принимать поле при создании экземпляра. В качестве значения инициализации может выступать любое выражение, которое вычислимо во время компиляции.
- конструктор
- По умолчанию, для структуры создается автоматический конструктор, который включает в себя все поля структуры в том порядке, как они описаны в самой структуре.
Работа со структурой
- Имя файла.
- Тип файла: исполняемый или не исполняемый.
- Полный путь к файлу.
- Размер файла.
Для этого создадим следующую структуру:
структура ОписаниеФайла
пер ИмяФайла: Строка = "" // имя файла
знч Исполняемый: Булево = Ложь // тип файла
пер ПолныйПуть: Строка = "" // полный путь
пер РазмерФайла: Число = 0 // размер файла
;
Если потребуется описать переменную с типом ОписаниеФайла, то сделать
это можно обычным образом: пер Файл: ОписаниеФайла;
. Если надо сразу
инициализировать переменную некоторым значением, то это можно сделать следующим образом
(на примере командного процессора ОС Windows 10 версии
1903):
структура ОписаниеФайла
пер ИмяФайла: Строка = "" // имя файла
знч Исполняемый: Булево = Ложь // тип файла
пер ПолныйПуть: Строка = "" // полный путь
пер РазмерФайла: Число = 0 // размер файла
;
метод Скрипт()
пер КомандныйПроцессор: ОписаниеФайла = новый ОписаниеФайла("cmd.exe",
Истина,
"C:\\Windows\\System32\\cmd.exe",
280064)
;
- Свойству
ИмяФайла
будет присвоена строкаcmd.exe
. - Свойству
Исполняемый
будет присвоено значение Ложь. - Свойству
ПолныйПуть
будет присвоена строкаC:\\Windows\\System32\\cmd.exe
. - Свойству
РазмерФайла
будет присвоено значение 280 064.
Стоит обратить внимание на то, что свойство Исполняемый
указано с
модификатором знч. А это означает, что написать выражение
КомандныйПроцессор.Исполняемый = ложь
уже не получится.
Очевидно, что в реальной жизни параметры файла следует заполнять, предварительно получив эти значения у файловой системы, но в примере можно пойти на некоторое упрощение и заранее получить нужные значения.
Если теперь нам необходимо получить значение какого-то поля структуры, то для этого
потребуется указать имя переменной и имя поля, разделив их символом «точка» — вот так:
КомандныйПроцессор.ИмяФайла
вернет значение, которое находится в
поле ИмяФайла
переменной КомандныйПроцессор
, описанной
с типом структуры ОписаниеФайла
. Указанное выражение может
использоваться как в качестве источника — для получения значения поля, так и в качестве
назначения выражения — для установки значения поля.
Кроме указанного способа значение поля структуры можно получить с помощью операции
доступа по индексу []. Для этого следует в квадратных скобках после
имени переменной указать имя свойства, с которым надо работать:
КомандныйПроцессор["ИмяФайла"]
или
КомандныйПроцессор[стрИмяПоля]
.
Сравнение структур
Допустимо сравнение двух значений типа структура на равенство (или неравенство). Две структуры будут считаться равными, если эти структуры одного типа и значения полей попарно совпадают.