Auswahlstrukturen


if ... else

Diese Auswahlstruktur gibt es in fast allen Programmiersprachen mit leichten Differenzen der Schreibung. Hier also:
 
Entscheid zwischen zwei einzelnen Befehlen
if (bedingung)
   anweisung1;
else
   anweisung2;

Entscheid zwischen zwei Anweisungsblöcken
if (bedingung)
   {anweisungen1}
else
   {anweisungen2}

Der else-Zweig kann entfallen. Für die Formulierung der Bedingung gelten die üblichen Regeln, man begucke die  Vergleichsoperatoren. Das Ergebnis muß true oder false sein.


Einfaches Ent-Oder-Weder

Es gibt eine in der Formulierung für normale Hirne ziemlich unverständliche, für C-Programmierer jedoch vertraute Auswahlabfrage, die nur zwei mögliche Ergebnisse zuläßt.  Die Alternativen werden an eine Bedingungsabfrage einfach angehängt. Die Bedingungsabfrage ist geklammert und ergibt entweder true oder false. Nach dem trennenden Fragezeichen folgen erst der true-Wert, dann nach dem trennenden Doppelpunkt der false-Wert. Das Ergebnis wird meist einer Variablen zugewiesen. Also im Klartext:

ergebnisvariable = (bedingungsabfrage)? true-Wert : false-Wert;

gucken wir uns gleich ein wildes Beispiel an:

im Seitenkopf steht diese Funktionsdefinition (das Ergebnis errechnet er selbst, damit keiner abgucken kann!):
<script language="JavaScript">
   function Rechne() { 
      var ergebnis = 585/13;
      do {
         var eingabe = prompt("Wieviel ist 585/13 ? ","bitte Ergebnis hierher tippen");
         var bewertung = (eingabe == ergebnis) ? "Gratuliere, das war total richtig" : (eingabe==null)?"Feigling":"nee Du, das war nix!";
         alert(bewertung);}
      while ((eingabe!= ergebnis)&&(eingabe!=null));}
</script>

Hier gleich unten wird die Funktion mit dem Button aufgerufen:
<form><input type=button value="Versuch" onclick="Rechne()"></form>

Hier haben wir die Struktur gleich geschachtelt. Da die Variable "eingabe" in jedem Umlauf neu initialisiert wird, erhält sie bei "Abbruch" den Wert null. Der wird für die Differenzierung der Texte und den Abbruch der Schleife genutzt.
Theoretisch könnte eine Funktionsdefinition im Kopf entfallen, und der Funktionskörper als Script direkt im Text stehen. Beim Seitenaufbau wird aber ein solches Script ausgeführt. Dann erscheint über dem Seitentext sofort die Abfragebox. Da das nicht erwünscht ist, muß der Umweg über die Funktion gewählt werden, die erst auf ein Ereignis hin, hier den Tastendruck, gestartet wird.


 Fallunterscheidung mit "switch"

Diese Auswahlstruktur prüft, ob die hinter switch angegebenen Variablenwerte den tatsächlichen entsprechen und führt gegebenenfalls die  zugehörige Anweisung bzw. den Anweisungsfolge aus. Der default-Zweig wird dann ausgeführt, wenn es vorher keinen Treffer gab. Wichtig sind die break-Anweisungen. Hier schlägt das schwere C-Erbe von JavaScript voll zu. Die Switch-Anweisung darf nicht mit der Select-Case-Anweisung von Basic oder der Case-Of-Anweisung von Pascal verwechselt werden. Denn C und  JavaScript freuen sich über einen einmal erzielten Treffer so sehr, daß sie danach alle weiteren Anweisungen der restlichen Case-Zweige ohne Prüfung auch noch ausführen. Ich würde so etwas Irreführung oder einen fetten Programmfehler nennen. Mich fragt aber keiner. Also: erst break bringt die switch-Anweisung zum switchen.


switch (variable)
{
Case "wert1":
   anweisungen1;
   break;
Case "wert2":
   anweisungen2;
   break;
...
default:
   anweisungenx;
}

Das Bestätigungsfenster confirm

Eine Methode des immer vorhandenen Objektes window (welches beim Aufruf nicht genannt werden muß, weil es allgegenwärtig ist) ist confirm. Es öffnet sich ein Fragefenster, das die Auswahl zwischen "OK" und "Abbruch" anbietet. Der Fragetext ist natürlich, wie der programmtechnische Einbau der angebotenen Alternative, Sache des Seitengestalters. Der Aufruf erfolgt typischerweise als Zuweisung. Es geht auch mit confirm allein, dann ist aber das Ergebnis nicht auswertbar. Die Variable enthält nach dem Schließen des Fensters entweder den Wert "true" oder bei "Abbruch" den Wert "false". Anschließend kann abhängig von der vorher gedrückten Taste unterschiedlich reagiert werden.

ergebnis = confirm("Ich beginne jetzt, es kann dauern");

Die Anwendung von confirm ist unkompliziert. Hier lautet der Aufruf für den obigen Test:

<form>
  <input type=button value="wieder ein Test"  onclick="ergebnis=confirm('Ich beginne jetzt, das kann dauern'); alert(ergebnis);">
</form>