5. Sprachelemente / Operatoren
 
zurück
5.5 Relationsoperatoren und Zugehörigkeitstest


Mit Relationsoperatoren können Operanden gelichen Typs verglichen werden. Das Ergebnis dieses Vergleichs kann entweder in einer Bedingung verwendet oder in einer Booleschen Variable gespeichert werden.

Relationsoperatoren (= und /=)

Relationsoperatoren sind nicht für limitierte Typen und für anonyme Zugriffstypen definiert.

Reihungstypen können nur gleich sein, wenn sie die gleiche Anzahl Komponenten enthalten und die Komponenten beider Reihungen an denselben Indexpositionen den gleichen Wert haben.

Verbundtypen können nur gleich sein, wenn sie vom selben Typ sind. Wenn ein Verbundtyp eine Diskriminante enthält, so müssen auch die Diskriminanten der beiden Verbunde den gleichen Wert haben, damit die Verbunde gleich sein können.

Relationsoperatoren (<, <=, >, >=)

Relationsoperatoren sind nur definiert für
- skalare Typen und
- eindimensionale Reihungstypen mit diskreten Komponententypen.

Skalare Typen können miteinander verglichen werden, wenn sie einen gemeinsamen übergeordneten Typ haben, so z. B. Integer und Positive, eine Teilmenge von Integer.

Um verschiedenartige skalare Typen miteinander zu vergleichen, z. B. Float mit Integer, muß einer der beiden Typen in den anderen konvertiert werden, in diesem Beispiel Integer nach Float.

Beispiel (skalare Typen):

A,B : Integer;
F : Float;
...
if A <= B then
   Put_Line ("A <= B");
else
   Put_Line ("A > B");
end if;
...
if Float(A) > F then
   Put_Line ("A > F");
end if;

Beim Vergleich von Reihungstypen werden die Elemente der Reihungen einzeln in aufsteigender Reihenfolge verglichen, bis eines der Elemente für den Vergleich ein eindeutiges Ergebnis liefert. Auch hier gilt, daß verschiedene Reihungstypen verglichen werden können, sofern sie einen gemeinsamen übergeordneten Typ haben.

Wenn eine dieser Reihungen weniger Elemente enthält als die andere und die Elemente der Reihung mit weniger Elementen den gleichpositionierten Elementen der Reihung mit mehr Elementen entsprechen, so ist die Reihung mit mehr Elementen automatisch größer als die andere. Eine Reihung mit einem Element ist also auf jeden Fall größer als eine Reihung ohne Elemente.

Beispiel (Reihungstypen):

type Eine_Reihung is array (1..5) of Integer;
R1: Eine_Reihung := (1,5,3,2,4);
R2: Eine_Reihung := (1,5,4,3,2);
...
if R1 < R2 then
   -- Aus Position 3 der Reihungen ergibt sich, dass R1 kleiner als R2 ist
   Put_Line ("R1 < R2");
end if;

Für mehrdimensionale Reihungen ist kein Vergleich auf kleiner oder größer möglich. Hier kann nur verglichen werden, ob die Reihungen identisch sind. Hierbei werden jeweils die Positionen mit gleichem Index verglichen.

Zugehörigkeitstests dienen dazu, festzustellen, ob ein Wert innerhalb (in) eines bestimmten Bereichs oder nicht innerhalb (not in) eines bestimmten Bereichs liegt.

Mit X in Untertyp kann z. B. eine Integer-Zahl daraufhin geprüft werden, ob sie sich im Bereich des Untertyps befindet, bevor sie einer Variablen dieses Untertyps zugewiesen wird.

Statt X not in Untertyp könnte auch not (X in Untertyp) verwendet werden.
Die Schreibweise mit not in ist aber verständlicher.

Beispiel:

subtype Mein_Bereich is integer range 30 .. 100;
X: Integer := 20;
...
if X in 1 .. 50 then
   Put_Line (Integer'Image(X) & " in 1 .. 50");
end if;
if X not in Mein_Bereich then
   Put_Line (Integer'Image(X) & " not in " & Integer'Image(Mein_Bereich'First) & " .." &
                                                                      Integer'Image(Mein_Bereich'Last) );
end if;



 
zurück
 Index   Ada Tour - Dokumentation  
© 2003 Förderverein Ada Deutschland e.V.