Logische Ausdrücke
Verknüpfung logischer Ausdrücke
Als logische Ausdrücke werden alle Ausdrücke bezeichnet, die einen Wahrheitswert (true oder false) zurückliefern. Zu den logischen Ausdrücken zählen damit auch die vergleichenden Ausdrücke (gleich, ungleich, größer, kleiner usw.), die aber in einem eigenen Kapitel erläutert werden.
Logische Verknüpfungen verbinden mehrere logische Ausdrücke zu einem komplexeren logischen Ausdruck. Abhängig vom eingesetzten Verknüpfungsoperator ist der zusammengesetzte Ausdruck zum Beispiel genau dann wahr, wenn alle verknüpften Ausdrücke wahr sind (Und-Verknüpfung) oder wenn mindestens einer der verknüpften Ausdrücke wahr ist (Oder-Verknüpfung).
Logische Operationen können innerhalb der Vorlagensyntax verwendet werden. Eine Möglichkeit, sie auszugeben, ist über die Anweisung $CMS_VALUE(...)$.
Und-Verknüpfung
Die Und-Verknüpfung ist über den Operator '&&' möglich:
a&&b
wobei sowohl 'a' als auch 'b' logische Ausdrücke sind.
Der Ausdruck:
(2<3) && (3>2)
liefert den Wert 'true' vom Datentyp Boolean zurück, da die beiden verknüpften Ausdrücke ebenfalls 'true' sind.
Oder-Verknüpfung
Die Oder-Verknüpfung ist über den Operator '||' möglich:
a||b
wobei sowohl 'a' als auch 'b' logische Ausdrücke sind.
Der Ausdruck:
(3<3) || (3>2)
liefert den Wert 'true' vom Datentyp Boolean zurück, da einer der beiden verknüpften Ausdrücke ebenfalls 'true' ist.
Negation
Die Negation eines Ausdrucks ist durch den Operator '!' möglich. Dabei wird bei Ausführung der Negation zu einem Ausdruck 'a' ein Ausdruck mit entgegengesetztem Wahrheitswert gebildet:
!a
bedeutet, wenn
- der Ausdruck a 'true' ist, dann ist die Verneinung 'false'
- der Ausdruck a 'false' ist, dann ist die Verneinung 'true'
Ergebnisse logischer Verknüpfungen in der Übersicht
Ausdruck 'a' | Operator | Ausdruck 'b' | Ergebnis der Verknüpfung |
---|---|---|---|
true | && | true | true |
true | && | false | false |
false | && | true | false |
false | && | false | false |
true | || | true | true |
true | || | false | true |
false | || | true | true |
false | || | false | false |
! | true | false | |
! | false | true | |
Auswertungsreihenfolge
In FirstSpirit werden Kombinationen einzelner Operatoren innerhalb logischer bzw. vergleichender Ausdrücke wie in anderen Programmiersprachen (z.B. Java) nach einer bestimmten Rangfolge ausgewertet.
Wird eine Und-Verknüpfung (Konjunktion) a && b verwendet, so wird b nicht ausgewertet, wenn a bereits den Booleschen Wert 'false' zurückliefert. Bei der Verwendung einer Oder-Verknüpfung (Disjunktion) a || b wird b nicht ausgewertet, wenn a bereits den Booleschen Wert 'true' zurückliefert.
Zusätzlich gibt es eine Rangfolge der Operatoren, d.h. vergleichende Ausdrücke ("==", "!=", "<", ">", "<=", ">=") verfügen über eine höhere Auswertungspriorität als logische Ausdrücke ("&&", "||"). Dadurch werden vergleichende Ausdrücke vor den logischen Ausdrücken ausgewertet, wodurch eine zusätzliche Klammerung entfallen kann.
Innerhalb der vergleichenden Ausdrücke haben darüber hinaus die Operatoren "<", ">", "<=" und ">=" eine höhere Priorität als die Operatoren "==" und "!=" und werden somit zuerst ausgewertet. Innerhalb der logischen Ausdrücke hat "&&" eine höhere Priorität als "||".
Vor der Auflösung logischer und vergleichender Ausdrücke werden zusätzlich noch Arithmetische Operationen ausgeführt. Somit ergibt sich folgende Rangfolge:
Operatoren mit der gleichen Rangfolge werden von links nach rechts ausgewertet. Durch Klammerung kann die Rangfolge beeinflusst werden. |
Beispiel:
Der Text "Der Wert der Variablen a beginnt mit b bzw. B." soll ausgegeben werden, wenn a nicht Null ist und der Wert (hier Ball) mit dem Buchstaben "b" (in Groß- oder Kleinschreibung) beginnt.
$CMS_SET(a, "Ball")$
$CMS_IF(a != null && a.charAt(0).toString.lowerCase == "b")$
Der Wert der Variablen a beginnt mit b bzw. B.
$CMS_END_IF$
In diesem Beispiel liefern sowohl der Ausdruck a != null als auch der Ausdruck a.charAt(0).toString.lowerCase == "b" den Booleschen Wert 'true' zurück. Ergebnis: Der Text wird ausgegeben.
In einem zweiten Beispiel soll der Text "Der Wert der Variablen a beginnt mit b bzw. B." ausgegeben werden, wenn a nicht Null ist und der Wert mit dem Buchstaben "b" (in Groß- oder Kleinschreibung) beginnt.
$CMS_SET(a, null)$
$CMS_IF(a != null && a.charAt(0).toString.lowerCase == "b")$
Der Wert der Variablen a beginnt mit b bzw. B.
$CMS_END_IF$
In diesem Fall wird der Text nicht ausgegeben, da zunächst der Ausdruck a != null ausgewertet wird. Dieser liefert das Ergebnis 'false', so dass der niedriger priorisierte Ausdruck (hier: &&) nicht mehr zum Tragen kommt.