Die Syntax des ternären Operators in Java (Die Syntax des ternären Operators in Java), Lektion, Seite 724169
https://www.purl.org/stefan_ram/pub/syntax_ternaerer_java (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Die Syntax des ternären Operators in Java 

Ein ternärer Ausdruck  besteht aus einem Ausdruck, der lexikalischen Einheit Fragezeichen »?«, einem Ausdruck, der lexikalischen Einheit Doppelpunkt »:« und schließlich noch einem Ausdruck (in dieser Reihenfolge).

Syntaxdiagramm (vereinfacht)
Ausdruck
.----------. .-. .----------. .-. .----------.
--->| Ausdruck |--->( ? )--->| Ausdruck |--->( : )--->| Ausdruck |--->
'----------' '-' '----------' '-' '----------'

Der ternären Ausdruck wird auch bedingter Ausdruck  genannt.

Priorität

Die folgende Tabelle gibt die Assoziativität und Priorität der bisher behandelten Operatoren wieder. Für den ternären Operator  gilt die Einordnung aber nur für seine erste  Operandenstelle, wie weiter unten erläutert werden wird.

Eigenschaften

S P A (S = Stelligkeit ("Aritaet"), P = Position, A = Assoziativitaet)

() 1 Z Eingeklammerter Ausdruck
+ - 1 P Unaere vorangestellte Operatoren (Vorzeichen)
* / 2 I L "Punktrechnung": Multiplikation, Division
+ - 2 I L "Strichrechnung": Addition, Subtraktion
< > 2 I L Vergleiche
== != 2 I L Gleichheitspruefung und Ungleichheitspruefung
?: 3 I R Ternaerer Operator
= 2 I R Zuweisung

Details zur Priorität

Die Priorität des ternären Operators ist etwas subtiler, da sie sich für die einzelnen Stellen des Operators unterscheidet.

Erste Stelle

In »a = b ? x : y« ist die Priorität des ternären Operators höher  als die des Zuweisungsoperators »=«, es bedeutet also »a =( b ? x : y )«.

Ansonsten ist die Priorität des ternären Operators an dieser Stelle niedriger  als die jedes anderen binären oder unären Operators »« außer dem Zuweisungsoperator; Daher ist »a ○ b ? x : y« für einen binären Operator »«, bei dem es sich nicht  um den Zuweisungsoperator »=« handelt, dasselbe wie »( a ○ b )? x : y«.

Zweite Stelle

In »b ? … : z« ist die Priorität des ternären Operators niedriger  als die jedes anderen Operators, da die beiden lexikalischen Einheiten »?« und »:« wie Klammern wirken. Daher ist »b ? … : z« stets dasselbe wie »b ?( … ): z«, falls »« ein Ausdruck ist.

Dritte Stelle

In »b ? x : y = z« ist die Priorität des ternären Operators höher  als die des Zuweisungsoperators, es bedeutet also »( b ? x : y )= z«.

Ansonsten ist die Priorität des ternären Operators an dieser Stelle niedriger  als die jedes anderen binären oder unären Operators »« außer dem Zuweisungsoperator; Daher ist »b ? x : y ○ z« für einen binären Operator »«, bei dem es sich nicht  um den Zuweisungsoperator »=« handelt, dasselbe wie »b ? x :( y ○ z )«.

Die Assoziativitätsrichtung

»b ? x : c ? y : z« könnte »( b ? x : c )? y : z« bedeuten, aber es bedeutet »b ? x : ( c ? y : z )«. In diesem Sinne ist der ternäre Operator rechtsassoziativ.

Main.java

public final class Main
{

public static void main( final java.lang.String[] args )
{

boolean b = true;
boolean d = false;
boolean x = true;
boolean y = false;
boolean z = true;

java.lang.System.out.println(( b ? x : d )? y : z );
java.lang.System.out.println( b ? x : d ? y : z );
java.lang.System.out.println( b ? x : ( d ? y : z )); }}

Protokoll
false
true
true

Ausdrücke ⁺

Die Definition der syntaktischen Kategorie Ausdruck  wird um Ausdrücke mit dem neu vorgestellten Operator erweitert.

Syntaxdiagramm

Ausdruck

.----------.
---.------------------------------------------------------>| Literal |----.---->
| '----------' |
| .----------. |
'------------------------------------------------------>| Name |----'
| '----------' |
| .-. .----------. .-. |
'------------------->( ( )--->| Ausdruck |--->( ) )---------------------'
| '-' '----------' '-' |
| .-------. .-. .----------. .-. |
'--->| Name |------>( ( )--->| Liste |--->( ) )---------------------'
| '-------' '-' '----------' '-' |
| .-. .----------. |
'-------------------------------------------->( - )---->| Ausdruck |----'
| '-' '----------' |
| .-. .----------. |
'-------------------------------------------->( + )---->| Ausdruck |----'
| '-' '----------' |
| .----------. .-. .----------. |
'---------------------------->| Ausdruck |--->( / )---->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'---------------------------->| Ausdruck |--->( + )---->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'---------------------------->| Ausdruck |--->( - )---->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'---------------------------->| Ausdruck |--->( * )---->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'---------------------------->| Ausdruck |--->( < )---->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'---------------------------->| Ausdruck |--->( > )---->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .--. .----------. |
'---------------------------->| Ausdruck |--->( <= )--->| Ausdruck |----'
| '----------' '--' '----------' |
| .----------. .--. .----------. |
'---------------------------->| Ausdruck |--->( >= )--->| Ausdruck |----'
| '----------' '--' '----------' |
| .----------. .--. .----------. |
'---------------------------->| Ausdruck |--->( == )--->| Ausdruck |----'
| '----------' '--' '----------' |
| .----------. .--. .----------. |
'---------------------------->| Ausdruck |--->( != )--->| Ausdruck |----'
| '----------' '--' '----------' |
| .----------. .-. .----------. .-. .----------. |
'--->| Ausdruck |--->( ? )--->| Ausdruck |--->( : )---->| Ausdruck |----'
| '----------' '-' '----------' '-' '----------' |
| .----------. .-. .----------. |
'---------------------------->| Ausdruck |--->( = )---->| Ausdruck |----'
'----------' '-' '----------'

Übungsaufgabe

/   Übungsaufgabe

Schreiben Sie eine Inkarnation der im folgenden angegebenen Produktionsregel für die Kategorie „Ausdruck“ nieder.

Syntaxdiagramm (vereinfacht)
Ausdruck
.----------. .-. .----------. .-. .----------.
--->| Ausdruck |--->( ? )--->| Ausdruck |--->( : )--->| Ausdruck |--->
'----------' '-' '----------' '-' '----------'

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram724169 stefan_ram:724169 Die Syntax des ternären Operators in Java Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724169, slrprddef724169, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/syntax_ternaerer_java