Die Auswertungswahl in JavaScript (Die Auswertungswahl in JavaScript), Lektion, Seite 722810
https://www.purl.org/stefan_ram/pub/auswertungswahl_javascript (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
JavaScript-Kurs

Der ternäre Operator in JavaScript 

Die Syntax

Der ternäre Operator  hat drei  Operanden. Wir nennen ihn auch ?-:-Operator.

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

Einen Operator mit drei Operanden nennt man auch einen ternären Operator. Da es in JavaScript  nur einen  ternären Operator gibt, nennt man ihn auch den  ternären Operator. Eine Anwendung jenes Operators ist ein Ausdruck, der nur aus jenem Operator und seinen Operanden besteht – wir nennen solch eine Anwendung auch einen ternären Ausdruck.

Die Priorität

Man kann die Vorrangregeln eines ternären Operators nicht immer durch eine einfache Priorität ausdrücken. Aber etwas vereinfacht gesagt ist die Priorität des ternären Operators so, daß sie ungefähr mit der Priorität eines Zuweisungsoperators  vergleichbar ist.

Wenn ein ternärer Ausdruck auf der rechten Seite einer Zuweisung vorkommt, so ist seine Priorität etwas stärker als die der Zuweisung, aber in Bezug auf die beiden letzten Operanden ist sie etwas schwächer, so daß dort Zuweisungen stehen dürfen, ohne daß sie eingeklammert werden müssen. Das folgende Beispiel hat also dieselbe Bedeutung wie die darunterstehende Schreibweise mit Klammern.

Beispiel

x = 2 ? y = 3 : z = 4

x =( 2 ?( y = 3 ):( z = 4 ));

Im Zweifelsfall setze man Klammern.

Eigenschaften von Operatoren

A P A (A = Aritaet, P = Position [Zirkumfix, Praefix, Infix, sonstige], A = Assoziativitaet)

() 1 Z Eingeklammerter Ausdruck
() S Aufruf
+ - typeof delete 1 P Unaere vorangestellte Operatoren (Vorzeichen)
* / 2 I L "Punktrechnung": Multiplikation, Division
+ - 2 I L "Strichrechnung": Addition, Subtraktion
< 2 I L Kleiner
=== !== 2 I L Gleichheit, Ungleichheit
?: 3 I R bedingte Auswertung
= ()=> 2 I R Zuweisung, Klammerpfeil

Die Semantik

Der ternäre Operator wertet zuerst seinen ersten Operanden, links vom Fragezeichen, aus.

Wenn der sich ergebende Wert als wahr gilt, so wird der Ausdruck links  vom Doppelpunkt ausgewertet, und der Ausdruck rechts vom Doppelpunkt wird nicht  ausgewertet, andernfalls wird der Ausdruck rechts  vom Doppelpunkt ausgewertet, und der Ausdruck links vom Doppelpunkt wird nicht  ausgewertet.

Daher nennen wir den Ausdruck vor dem Fragezeichen auch Bedingung, den Ausdruck links vom Doppelpunkt Konsequenz  und den Ausdruck rechts vom Doppelpunkt Alternative.

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

Der Wert des ganzen Ausdrucks ist dann der Wert der letzten Auswertung.

Beispiel eines ternären Ausdrucks
b ? x : y
Sinngemäße Wiedergabe des Beispielausdrucks auf deutsch
wenn b, dann x, sonst y
Wörtliche Wiedergabe des Beispielausdrucks auf deutsch
b, Fragezeichen, x, Doppelpunkt, y

Beispiel Die Auswertung der Bedingung

Auswertung
console.log( "a" )? 1 : 2

a

2

Beispiel Die Wahl eines Wertes

Auswertung
0 ? 1 : 2
2
Auswertung
1 ? 2 : 3
2

Beispiel Die Wahl einer Wirkung

Auswertung
console.log( "a" )? console.log( "b" ): console.log( "c" )

a

c

undefined

Auswertung
true ? console.log( "a" ): console.log( "b" );

a

undefined

Auswertung
false ? console.log( "a" ): console.log( "b" );

b

undefined

Beispiel Ein Glücksspiel

Auswertung
Math.random() < 0.1 ? "gewonnen" : "verloren"
"verloren"
Auswertung
Math.random() < 0.1 ? "gewonnen" : "verloren"
"gewonnen"

Beispiel Der Kehrwert

Auswertung
1/0
Infinity
Auswertung
const kehrwert = x => x ? 1/x : undefined;
undefined
Auswertung
kehrwert( 1 )
1
Auswertung
kehrwert( 0 )
undefined

Im letzten Beispiel liegt für den Kehrwert von »0« »NaN« nahe, doch da im Mathematikunterricht immer erklärt wird, daß der Kehrwert von »0« undefiniert  ist, drängt sich die Verwendung von »undefined« hier als mathematisch korrekt auf.

Beispiel Verschachtelungen des ternären Operators

Im folgenden Beispiel werden mehrere ternäre Operator ineinander verschachtelt.

Bei der folgenden Verschachtelung ist jeweils der dritte Operand eines ternären Operators wieder ein ternärer Ausdruck. Dadurch ist die Verschachtelung effektiv eine einfache lineare Folge von Entscheidungen: Wann immer

Auswertung
const deutsch = x => 
x === 0 ? "Null" :
x === 1 ? "Eins" :
x === 2 ? "Zwei" :
x === 3 ? "Drei" : undefined;
undefined
Auswertung
deutsch( 1 )
"Eins"

Beispiel Auswahl einer Funktion

Im folgenden Beispiel wird ein ternärer Operator verwendet, um eine Funktion auszuwählen.

Auswertung
( 0 ? Math.max : Math.min )( 1, 2, 3 )
1
Auswertung
( 1 ? Math.max : Math.min )( 1, 2, 3 )
3

Wir könne auf diese Weise eine Funktion »m« definieren, die eine Funktion ergibt, welche das Minimum oder das Maximum berechnet, je nachdem ob das Argument jener Funktion »m« »0« beziehungsweise »1« ist.

Auswertung
m = x =>( x ? Math.max : Math.min )
function m()
Auswertung
m( 0 )( 1, 2, 3 )
1
Auswertung
m( 1 )( 1, 2, 3 )
3

Übungsfragen

?   Übungsfrage

Welchen Wert hat »0 ? 1 : 2«?

?   Übungsfrage

Welchen Wert hat »2 ? 1 : 0«?

?   Übungsfrage

Welchen Wert hat »true ? false : true«?

?   Übungsfrage

Welchen Wert hat »"a" ? "b" : "c"«?

Übungsaufgaben

Diese Übungsaufgaben sollten möglichst ohne Vorgriffe, also mit dem bisher behandelten Sprachelementen gelöst werden.

/   Schreiben eines ternären Ausdrucks

Schreiben Sie einen ternären Ausdruck mit der Bedingung »x«, der Konsequenz »f()« und der Alternative »2«.

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

/   Übersetzung

Übersetzen Sie die deutschsprachige Formulierung „Wenn f von 2, dann 1, sonst 0 “ in einen ternären Ausdruck.

Beispiel eines ternären Ausdrucks
b ? x : y
Sinngemäße Wiedergabe des Beispielausdrucks auf deutsch
wenn b, dann x, sonst y

/   Die Negation

Definieren Sie eine Funktion, die »false« ergibt, falls ihr Argumentwert als wahr gilt und »true« sonst. Verwenden Sie dazu den ternären Operator.

/   Eine willkürliche Funktion

Schreiben Sie eine Funktion, die 17 ergibt, falls ihr Argumentwert 0 ist, und sonst 12.

/   Eine willkürliche Funktion (1)

Schreiben Sie eine Funktion, die 17 ausgibt, falls ihr Argumentwert 0 ist, und sonst 12. Verwenden Sie dazu die Lösung der vorigen Übungsaufgabe, ohne diese zu verändern.

/   Eine willkürliche Funktion (2)

Schreiben Sie eine Funktion, die 17 ergibt, falls ihr Argumentwert 7 ist, und sonst 12.

/   Eine willkürliche Funktion

Definieren Sie eine Funktion, die 17 ergibt, falls ihr Argumentwert gleich 4 ist, und 12, falls ihr Argumentwert gleich 6 ist. Verwenden Sie dazu den ternären Operator.

/   Die Fakultät

Definieren Sie eine Funktion zur Berechnung der Fakultät einer natürlichen Zahl »n«, die der folgenden mathematischen Definition möglichst nahekommt.

Mathematische Definition der Fakultät
          .-
| 1, falls x = 0 und
f( n ) = <
| n * f( n - 1 ) sonst
'-

/   Textdarstellung von Schulnoten

Schreiben Sie mit Hilfe des ternären Operators eine Wertfunktion, welche dem Argumentwert »1« die Zeichenfolge »"sehr gut"« und dem Argumentwert »2« die Zeichenfolge »gut« zuordnet.

/   Textdarstellung von Schulnoten (1)

Schreiben Sie mit Hilfe des ternären Operators eine Wertfunktion, welche dem Argumentwert »1« die Zeichenfolge »"sehr gut"«, dem Argumentwert »2« die Zeichenfolge »gut« und dem Argumentwert »3« die Zeichenfolge »befriedigend« zuordnet.

/   Teilbarkeit

Schreiben Sie die Deklaration einer Funktion »d2«, so daß der Wert des Ausdrucks »d2( j )« genau dann true  ist, wenn »j« durch »2« teilbar ist.

/   Schaltjahr

Schreiben Sie die Deklaration einer Funktion »schaltjahr«, so daß der Wert des Ausdrucks »schaltjahr( j )« genau dann true  ist, wenn »j« ein Schaltjahr war (Diese Funktion braucht nur für Jahreszahlen von 2001 bis 2099 richtige Ergebnisse zu liefern).

Zusatzaufgaben

Diese Zusatzaufgaben sollten möglichst ohne Vorgriffe, also mit dem bisher behandelten Sprachelementen gelöst werden. (Da der Autor selber noch nicht alle Aufgaben bearbeitet hat, ist es nicht sicher, daß sich alle auf diese Weise lösen lassen. Es wird aber erwartet, daß dies möglich ist.)

/   Eine willkürliche Funktion (2)

Schreiben Sie eine Funktion, die 17 ergibt, falls ihr Argumentwert 4 ist, und 12, falls ihr Argumentwert 6 ist.

/   Normalisierung

Definieren Sie eine Funktion, welche die Zahl »0« auf »0« und alle anderen Zahlen auf »1« abbildet. Hierfür kann angenommen werden, daß als Argumentwerte nur Zahlen vorkommen.

/   Verneinung

Definieren Sie eine Funktion, die Werte, die als falsch gelten, auf »true« und alle anderen Werte auf »false« abbildet.

/   Und-Verknüpfung

Definieren Sie eine Funktion, die »true« ergibt, wenn beide Argumente als wahr gelten, und »false« sonst.

/   Oder-Verknüpfung

Definieren Sie eine Funktion, die »false« ergibt, wenn beide Argumente als falsch gelten sind, und »true« sonst.

/   exklusive oder-Verknüpfung

Definieren Sie eine Funktion, die »true« ergibt, wenn beide Argumente einander ungleich sind, und Null sonst. Hierfür kann angenommen werden, daß als Argumentwerte nur »false« und »true« vorkommen.

/   Gleichheit

Definieren Sie eine Funktion, die »true« ergibt, wenn beide Argumente einander gleich sind, und Null sonst. Hierfür kann angenommen werden, daß als Argumentwerte nur »false« und »true« vorkommen.

/   Negativ

Definieren Sie eine Funktion, die »false« ergibt, wenn ihr Argument negativ ist. Hierfür kann angenommen werden, daß als Argumentwerte nur Zahlen vorkommen.

/   Kleiner

Definieren Sie eine Funktion, die »true« ergibt, wenn das erste Argument kleiner ist als das zweite. Hierfür kann angenommen werden, daß als Argumentwerte nur Zahlen vorkommen.

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 stefanram722810 stefan_ram:722810 Die Auswertungswahl in JavaScript Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722810, slrprddef722810, 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/auswertungswahl_javascript