5. Sprachelemente / Operatoren
 
zurück
5.3 Operatoren und Ausdruckwertung





Auswertereihenfolge


Höherrangige Operatoren werden vor den niederrangigen ausgewertet.

Wenn innerhalb eines Ausdrucks mehrere gleichrangige Operatoren verwendet werden, so werden sie von links nach rechts ausgewertet.

Wenn der Ausdruck in einer anderen Reihenfolge ausgewertet werden soll als durch die Rangfolge vorgegeben, so muß der Teilausdruck, der zuerst ausgewertet werden soll, in runde Klammern gesetzt werden.


Beispiele:

X > 4 and Y > 3
-- Die Vergleichsoperationen werden zuerst ausgewertet und dann wird geprüft, ob beide Ergebnisse wahr sind
                
3 + 4 * 5
-- 4 wird zuerst mit 5 multipliziert und dann zu 3 addiert

-3 * 2**5
-- 2 hoch 5 wird berechnet bevor das Zwischenergebnis mit -3 multipliziert wird

( -3 * 2 )**5
-- -3 und 2 werden zuerst multipliziert und dann mit 5


Operatoren können auch mit unterschiedlichen Typen verwendet werden, ohne daß eine Typkonvertierung notwendig ist.


Operationen mit unterschiedlichen Typen

Wenn z. B. von Integer-Typen die Rede ist, so meint dieses nicht nur den Typ Integer selbst, sondern auch alle Untertypen (Datentyp mit einer Einschränkung) von Integer. Im folgenden Beispiel können somit auch Zahlen vom Typ Positiver_Bereich und Negativer_Bereich verknüpft oder verglichen werden. Wenn das Ergebnis einer Variablen zugewiesen werden soll, ist darauf zu achten, daß das Ergebnis im Definitionsbereich dieser Variablen bleibt, da ansonsten ein Laufzeitfehler ausgelöst wird.

subtype Positiver_Bereich is Integer range 0 .. Integer'Last;
subtype Negativer_Bereich is Integer range Integer'First .. 0;
P : Positiver_Bereich := 1;
N : Negativer_Bereich := -1;
I : Integer;
...
-- Vergleich und Addition erfolgen im Definitionsbereich von 'Integer',
-- dem gemeinsamen uebergeordneten Typ von Positiver_Bereich und
-- Negativer_Bereich.
if P /= N then
   I := P + N;
end if;
Operatoren als Funktionsaufruf

Operatoren (außer Zugehörigkeitstest und Kurzauswertungsoperatoren) können auf zwei Arten verwendet werden. Entweder können sie zwischen den Operanden stehen oder in Anführungsstrichen (quasi als Funktionsaufruf) vor den Operanden. Das Ergebnis beider Schreibweisen ist gleich.


Beispiele:

a + b       -- ist identisch zu
"+" (a, b)

abs a       -- ist identisch zu
"abs" (a)


Die Funktionsschreibweise muß verwendet werden, wenn durch Überladung von Operatoren eine Auflösung eines Ausdrucks nicht mehr möglich ist. In Verbindung mit der vollqualifizierten Schreibweise sind dann solche Ausdrücke aufzulösen.


Beispiel:

Name_der_Programmeinheit."+" (a, b)
zurück
 Index   Ada Tour - Dokumentation  
© 2003 Förderverein Ada Deutschland e.V.