Ада-95. Компилятор GNAT


Элементарные сведения: описание, создание, инициализация - часть 2


Кроме того, в подобных случаях, используются квалифицированные (указывающие имя типа) агрегаты:

Someone.all := Person'("Fred", 33); -- вариант с позиционным агрегатом

Someone.all := Person'( Name => "Fred"; -- вариант с именованным агрегатом Age => 33 );

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

Однако, стоит обратить внимание на то, что использование агрегатов для инициализации всего объекта сразу - более удобно, а вариант с именованным агрегатом имеет лучшую читабельность (по сравнению с позиционным агрегатом), а это важно при работе со сложными структурами данных.

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

Например, вместо выполненных ранее раздельно создания и инициализации, мы можем использовать следующее:

Someone := new Person'("Fred", 33); -- вариант с позиционным агрегатом

Someone := new Person'( Name => "Fred"; -- вариант с именованным агрегатом Age => 33 );

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

Таблица сравнения синтаксиса указателей/ссылочных типов

в языках Паскаль, Си и Ада:

Паскаль

C

Ада

Доступ к полям указываемого
объекта
a^.fieldname *a.fieldname
a->fieldname
a.fieldname
Копирование указателя b := a; b = a; b := a;
Копирование указываемого
обекта
b^ := a^; *b = *a; b.all := a.all




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



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