Die Ausführungswahl in JavaScript (Die Ausführungswahl in JavaScript), Lektion, Seite 722813
https://www.purl.org/stefan_ram/pub/ausfuehrungswahl_javascript (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
JavaScript-Kurs

Die Verzweigung in JavaScript 

Die Syntax der Verzweigung

Die Syntax der Verzweigung beginnt wie die Syntax der schon behandelten bedingten Auswertung, nur daß dann noch eine mit dem Schlüsselwort »else« eingeführte Anweisung folgt.

Bedingte Auswertung

Anweisung

.--. .-. .----------. .-. .-----------.
--->( if )--->( ( )--->| Ausdruck |--->( ) )--->| Anweisung |--->
'--' '-' '----------' '-' '-----------'

Verzweigung

Anweisung

.--. .-. .----------. .-. .-----------. .----. .-----------.
--->( if )--->( ( )--->| Ausdruck |--->( ) )--->| Anweisung |--->( else )--->| Anweisung |--->
'--' '-' '----------' '-' '-----------' '----' '-----------'

Die Semantik der Verzweigung

Wie bei der bedingten Auswertung wird zunächst der Ausdruck ausgewertet.

Falls der Wert des Ausdrucks als wahr  gilt, so wird die Anweisung vor  dem »else« ausgewertet, und der Wert der gesamten if-Anweisung ist dann der Wert jener Anweisung (oder »undefined«, falls die Anweisung keinen Wert produzierte). (Dies ist wie bei der bedingten Auswertung.)

Falls der Wert des Ausdrucks als falsch  gilt, so wird die Anweisung hinter  dem »else« ausgewertet, und der Wert der gesamten if-Anweisung ist dann der Wert jener Anweisung (oder »undefined«, falls die Anweisung keinen Wert produzierte).

Man bezeichnet jede der beiden Anweisungen auch als einen Zweig. Da bei jeder Auswertung der if-else-Anweisung nur einer der beiden Zweige ausgeführt wird, nennt man jene Anweisung auch eine Verzweigung.

Entsprechend der Bedeutung können wir auch die Bezeichnungen wie in dem folgenden Diagramm wählen.

Verzweigung

Anweisung

.--. .-. .-----------. .-. .------------. .----. .-------------.
--->( if )--->( ( )--->| Bedingung |--->( ) )--->| Konsequenz |--->( else )--->| Alternative |--->
'--' '-' '-----------' '-' '------------' '----' '-------------'

Falls wir von der „if-Anweisung“ sprechen, so wird damit offengelassen, ob diese eine else-Klause beinhaltet.

Wir nennen Ausdrücke und Anweisungen, bei denen die Auswertung eines Ausdrucks oder einer Anweisung in Abhängigkeit von einem Wahrheitswert erfolgt (wie der ternäre Ausdruck und die if-Anweisung) auch Entscheidungsstrukturen.

Die Verzweigung bezeichnen wir auch als if-else-Anweisung.

Die if-else-Anweisung ähnelt dem ?-:-Operator, der wichtigste Unterschied besteht darin, daß die Konsequenz und die Alternative bei der if-else-Anweisung Anweisungen  sind und beim ?-:-Operator Ausdrücke.

Lehrbücher verwenden die if-else-Anweisung etwas zu häufig. Oft kann ein Programmteil eleganter mit dem ?-:-Operator geschrieben werden. Die Autoren mancher Lehrbücher sind mit Sprachen groß geworden, in denen es keinen ?-:-Operator gab und sind diesen deshalb nicht gewohnt.

Beispiel einer if-Anweisung
if( 0 )1; else 2;
mögliche (nicht ganz) deutschsprachige Formulierung des Beispiels
Wenn 0, dann 1, sonst 2.

Beispiele der Verzweigung

Beispiel

Im folgenden Beispiel wird »alpha« ausgegeben, weil das »true« die Auswertung der Anweisung vor dem »else« verlangt.

Danach wird »theta« ausgegeben, weil das »false« die Auswertung der Anweisung hinter dem »else« verlangt.

Konsole

"use strict";

if( true )console.log( "alpha" ); else console.log( "gamma" );
if( false )console.log( "delta" ); else console.log( "theta" );

alpha

theta

undefined

Beispiel (1)

Im folgenden Beispiel wird zunächst zweimal »undefinert« für den Wert der Aufrufe »schreibeKehrwert();« beziehungsweise »schreibeKehrwert( 0 );« ausgegeben. (In manchen Konsolen werden beide Ausgaben zu einer Ausgabe mit dem Faktor »2« zusammengefaßt.)

Es folgt »1« und »0.5« für den Wert der Aufrufe »schreibeKehrwert( 1 );« beziehungsweise »schreibeKehrwert( 2 );«.

Das »undefined« am Ende ist der Wert der gesamten eingegebenen Sequenz, bestimmte durch deren letzte Anweisung »schreibeKehrwert( 2 );«.

Konsole

"use strict";

const schreibeKehrwert = n =>
{ if( n )console.log( 1/n );
else console.log( "undefiniert" ); }

schreibeKehrwert();
schreibeKehrwert( 0 );
schreibeKehrwert( 1 );
schreibeKehrwert( 2 );

undefiniert

undefiniert

1

0.5

undefined

Beispiel (2)

Das folgende Beispiel macht es sich zunutze, daß eine if-Anweisung einen Wert ergibt. Wenn dieser Wert als Ergebnis eines Aufrufs erscheinen soll, so ist jedoch die Verwendung von »eval« nötig.

Konsole

"use strict";

const name = a =>
{ "use strict";
return eval
( "if( a === 0 )'Null'; else if( a === 1 )'Eins'; else 'Zwei';" ); }

console.log( name( 0 ));
console.log( name( 1 ));
console.log( name( 2 ));

Null

Eins

Zwei

undefined

Wie in vielen Fällen läßt sich die Verzweigung hier gut durch einen ternären Ausdruck ersetzen.

Konsole

"use strict";

const name = a =>
{ "use strict"; return a === 0 ? 'Null' : a === 1 ? 'Eins': 'Zwei'; }

console.log( name( 0 ));
console.log( name( 1 ));
console.log( name( 2 ));

Null

Eins

Zwei

undefined

Übungsfragen

?   Übungsfrage

Welche Ausgabe erwarten Sie für die folgende Eingabe?

Konsole

"use strict";

const name = a =>
{ "use strict";
let result;
if( a === 0 )result = "Null";
if( a === 1 )result = "Eins";
if( a === 2 )result = "Zwei";
if( a === 3 )result = "Drei";
else result = "Vier";
return result; };

console.log( name( 0 ));
console.log( name( 1 ));
console.log( name( 2 ));
console.log( name( 3 ));
console.log( name( 4 ));

?   Übungsfrage

Welche Ausgabe erwarten Sie für die folgende Eingabe?

Konsole

"use strict";

const zwei = a =>
{ "use strict";

if( a = 2 )return "Zwei";
else return "Nicht Zwei"; }

console.log( zwei( 2 ));
console.log( zwei( 0 ));

Übungsaufgaben

/   Schreiben einer if-Anweisung

Schreiben Sie eine if-Anweisung mit der Bedingung »f()«, der Konsequenz »console.log( "Ok." );« und der Alternative »return -1;«.

Verzweigung

Anweisung

.--. .-. .-----------. .-. .------------. .----. .-------------.
--->( if )--->( ( )--->| Bedingung |--->( ) )--->| Konsequenz |--->( else )--->| Alternative |--->
'--' '-' '-----------' '-' '------------' '----' '-------------'

/   Übersetzung

Übersetzen Sie die (nicht ganz) deutschsprachige Formulierung „Wenn x, dann Rückgabe von 0, sonst Ausgabe des Wortes ‚Fehler‘. “ in eine if-Anweisung.

Beispiel einer if-Anweisung
if( 0 )1; else 2;
mögliche (nicht ganz) deutschsprachige Formulierung des Beispiels
Wenn 0, dann 1, sonst 2.

Vergleich mit dem ternären Ausdruck *

Man kann sagen, daß die folgende Verzweigung (mit einem Ausdruck »E « und Anweisungen »S « und »T «) in vielen Fällen dem darunterstehenden ternären Ausdruck entspricht.

Verzweigung
{ if( E  )S  else T  }
ternärer Ausdruck
{( E  )? eval( "S " ): eval( "T " ); }

Umgekehrt kann man den folgenden ternären Ausdruck in vielen Fällen als die darunterstehende Verzweigung schreiben (dabei sind »A « und »B « Ausdrücke).

ternärer Ausdruck
(( E  )?( A  ):( B  ))
Verzweigung
eval( "if( E  )A ; else B ;" )

Beim ternären Ausdruck sind die Konsequenz und die Alternative Ausdrücke, bei der Verzweigung Anweisungen.

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 stefanram722813 stefan_ram:722813 Die Ausführungswahl in JavaScript Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722813, slrprddef722813, 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/ausfuehrungswahl_javascript