next up previous contents index
Weiter: 2.3 Subtypen Hinauf: 2.2 Zusammengesetzte Typen Zurück: 2.2.2 Records

 

2.2.3 Aggregate

 

Ein Aggregat dient dazu, Werte von Komponenten zu Werten eines Arrays oder Records zusammenzufassen. Dabei unterscheidet man zwischen zwei Arten, wie die einzelnen Komponenten angesprochen werden, nämlich einerseits über ihre Position  innerhalb des übergeordneten Typs und andererseits über ihren Namen . Es ist auch erlaubt, beide Arten zu mischen, wobei jedoch immer die Festlegung über die Position vor der über den Namen zu verwenden ist, d.h., wenn einmal eine Komponente über ihren Namen angesprochen worden ist, so dürfen alle restlichen Komponenten auch nur mehr über Namen referenziert werden.

Betrachten wir zuerst Record-Aggregate  . Ein Beispiel für die Festlegung durch die Positionen der Komponenten ist:

(29, September, 1967) - siehe Typ Datum Seite gif
Derselbe Wert wird über benannte Komponentenfestlegung etwa ausgedrückt durch:

(Tag => 29, Monat => September, Jahr =>1967)
(Monat => September, Tag => 29, Jahr =>1967)

Mischformen sind:

(29, Jahr => 1967, Monat => September)
(29, September, Jahr => 1967)

Falls die restlichen Komponenten alle denselben Typ haben, kann man ihnen auch mit others geschlossen einen (gemeinsamen) Wert zuweisen, z.B.:

zero: constant komplex := (others => 0.0);

Beispiele für Array-Aggregate   sind im eindimensionalen Fall:

word_1: Acht_Bit_Vector := (true, true, true, false, false, true, false, true);
word_2: Acht_Bit_Vector := (1 => true, 3 => false, 5 => true, 7 => true,
=> true, 2 => true, 4 => false, 6 => false);
word_3: Acht_Bit_Vector := (3 .. 4 6 => false, others => true);

Das |-Zeichen dient wieder zur Aufzählung mehrerer Index-Bereiche, für die derselbe Wert zugewiesen werden soll. Das Schlüsselwort others darf nur verwendet werden, wenn aus dem Kontext klar ist, wie groß die Grenzen des Arrays wirklich sind. Wenn das nicht eindeutig bestimmt werden kann, darf man dem Compiler ,,unter die Arme greifen``. Dies geschieht durch sogenannte qualifizierte Ausdrücke (qualified expressions)    .

Das ist siche' ein T'ick!

Afrikanischer Pirat.  
Renè Goscinny  und Albert Uderzo, 
,,Asterix auf Korsika``.

Dabei wird dem Aggregat der Typ-Bezeichner eines constrained Arrays und außerdem ein ' (Tick) vorausgestellt, z.B.:

Acht_Bit_Vector'(3 .. 4 6 => false, others => true)

Im mehrdimensionalen Fall treten geschachtelte Aggregate auf, z.B.:

Schachbrett: Matrix(1..8, 1..8) := (1 .. 8 => (1 .. 8 => 0.0));

Auch hier gelten natürlich die obigen Ausführungen für others.



next up previous contents index
Weiter: 2.3 Subtypen Hinauf: 2.2 Zusammengesetzte Typen Zurück: 2.2.2 Records

Johann Blieberger
Wed Feb 11 09:58:52 MET 1998