и типом элемента. Такой тип
типом индекса и типом элемента. Такой тип называется типом массива без ограничений. Чтобы фактически объявить массив, необходимо добавить к типу ограничение индекса:
Ada |
-- Объявление типа массива без ограничений
А: А_Туре(0..9); — Массив с ограничением индекса
В: А_Туре(0..8); — Массив с ограничением индекса
Сигнатура А_Туре — одномерный массив с индексами типа integer и компонентами типа Float; границы индексов не являются частью сигнатуры.
Как и в языке Pascal, операции индексации полностью контролируются:
Ada |
В(9) := 20.5; -- Ошибка, индекс изменяется в пределах 0..8
Важность неограниченных массивов становится очевидной, когда мы рассматриваем параметры процедуры. Так как тип (неограниченного) массива-параметра определяется только сигнатурой, мы можем вызывать процедуру с любым фактическим параметром этого типа независимо от индексного ограничения:
Ada |
— Тип параметра: неограниченный массив
Sort(A); -- Типом А является А_Туре
Sort(B); -- Типом В также является А_Туре
Теперь возникает вопрос: как процедура Sort может получить доступ к границам массива? В языке Pascal границы были частью типа и таким образом были известны внутри процедуры. В языке Ada ограничения фактического параметра-массива автоматически передаются процедуре во время выполнения и могут быть получены через функции, называемые атрибутами. Если А произвольный массив, то: