Справочное руководство по языку Ада-83




Именуемые типы


Объект именуемого типа (запись) — это составной объект, состоящий из именованных компонент. Значение записи — составное значение, состоящее из значений своих компонент.

определение-именуемого-типа::= record список-компонент end recordсписок_компонент::= описание_компоненты {описание_компоненты} |{ описание_компоненты} раздел_вариантов | null;описание_компоненты ::= список_идентификаторов : определение_подтипа_компоненты [:= выражение]; определение_подтипа_компоненты ::= указание_подтипа

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

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

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

Если именуемый тип не имеет раздела дискриминантов, то одни и те же компоненты присутствуют во всех значениях этого типа. Если список компонент именуемого типа определен зарезервированным словом null и раздел дискриминантов отсутствует, то именуемый тип не имеет компонент и все записи этого типа — пустые записи.

Предвыполнение определения именуемого типа создает именуемый тип; оно состоит из предвыполнения соответствующих (единичных) описаний компонент в порядке их следования, включая описания компонент в разделе вариантов. Предвыполнение описания компоненты состоит из предвыполнения определения подтипа компоненты.

Для предвыполнения определения подтипа компоненты в случае, когда ограничение не зависит от дискриминанта, предвыполняется указание подтипа. Если, с другой стороны, ограничение зависит от дискриминанта, то Предвыполнение состоит из вычисления каждого входящего в ограничение выражения, которое не является дискриминантом.

Примеры описаний именуемого типа:

type DATE is record DAY : INTEGER range 1 ..31; MONTH : MONTHNAME; YEAR : INTEGER range 0 .. 4000; end record;type COMPLEX is record RE : REAL := 0.0; IM : REAL := 0.0; end rocord;

Примеры переменных именуемого типа:

TOMORROW, YESTERDAY : DATE; А, В, С : COMPLEX;-- компоненты А, В и С неявно инициализированы нулем

. Выражения по умолчанию для компоненты записи при отсутствии явной инициализации неявно вычисляются предвыполнением описания записи (см. 1). Если описание компоненты имеет несколько идентификаторов, то выражение вычисляется один раз для каждой такой компоненты записи (поскольку это описание эквивалентно последовательности единичных описаний компонент).

В отличие от компонент массива компоненты записи не обязательно имеют один и тот же тип.

Ссыпки: выражение 4.4, дискриминант 3.3, зависит от дискриминанта 1, идентификатор 2.3, имя 4.1, компонента 3.3, лимитируемый тип 4, обозначение типа 2, объект 3.2, ограничение 3.3, описание 3.1, подтип 3.3, Предвыполнение 3.9, раздел вариантов 3, раздел дискриминантов 3.7, 1, составное значение 3.3, составной ограничитель присваивания 2.2, список идентификаторов 3.2, тип

1. ДИСКРИМИНАНТЫ

Раздел дискриминантов специфицирует дискриминанты типа. Дискриминант записи — это компонента записи. Тип дискриминанта должен быть дискретным.

раздел-дискриминантов:: =

(спецификация-дискриминанта {; спецификация-дискриминанта})

спецификация-дискриминанта ::=

список-идентификаторов : обозначение-типа [:= выражение]

Раздел дискриминантов допустим только в описании именуемого типа, в описании личного типа или в неполном описании типа (соответствующее полное описание должно тогда описывать именуемый тип), а также в описании параметра настройки для формального личного типа.

Спецификация дискриминанта с несколькими идентификаторами эквивалентна последовательности единичных спецификаций дискриминантов, как пояснено в разд. Каждая единичная спецификация дискриминанта описывает дискриминант. Если спецификация дискриминанта включает составной ограничитель присваивания, за которым следует выражение, то это — выражение по умолчанию для дискриминанта; выражения по умолчанию должны быть заданы либо для всех, либо не заданы ни для одного из дискриминантов раздела дискриминантов.

Использование имени дискриминанта недопустимо в выражениях по умолчанию раздела дискриминантов, если спецификация дискриминанта сама дана в этом разделе дискриминантов.

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

Компонента называется зависимой от дискриминанта, если она — либо компонента записи, описанная в разделе вариантов, либо компонента записи, чье определение подтипа компоненты зависит от дискриминанта, либо, наконец, одна из подкомпонент, зависящих от дискриминанта.

Каждое значение записи включает значение каждого дискриминанта, заданного для именуемого типа; оно также включает значение для каждой компоненты записи, которая не зависит от дискриминанта. Значения дискриминантов определяют, значения каких компонент, зависящих от дискриминантов, присутствуют в значении записи.

Непосредственное присваивание дискриминанту объекта недопустимо; более того, дискриминант недопустим как фактический параметр вида in out или out либо как фактический параметр настройки вида in out. Единственным путем изменения значения дискриминанта переменной является присваивание (полного) значения самой переменной. Аналогично присваивание самой переменной является единственным путем изменения одной из ее компонент, если определение подтипа компоненты зависит от дискриминанта переменной.

Предвыполнение раздела дискриминантов не имеет другого эффекта.









Начало  Назад  Вперед



Книжный магазин