Select Case

 

Sollen in Abhängigkeit vom Wert eines Ausdrucks verschiedene Befehle ausgeführt werden, so ist eine Select Case Anweisung sehr elegant:

 

Select Case Ausdruck

    Case konstanten_vergleich1

        Anweisungen_1

    Case konstanten_vergleich2

        Anweisungen_2

    .

    .

    Case konstanten_vergleich_x

        Anweisungen_x

    Else   ' Else ist optional

        Anweisungen

End Case

 

Der Wert von Ausdruck wird berechnet. Danach springt die Programmausführung zum dem Konstantenvergleich, der als erster zu wahr ausgewertet wird, und führt das Programm dort fort. Kann kein Konstantenvergleich erfüllt werden, so wird das Select Case Konstrukt verlassen.

 

Für den Konstantenvergleich können spezielle Vergleiche oder ganze Bereiche angeben werden. Hier Beispiele für alle Möglichkeiten:

   

Vergleich

Ausführung bei


 

Konstante, = Konstante

 Ausdruck gleich Konstante

< Konstante

 Ausdruck kleiner Konstante

<= Konstante

 Ausdruck kleiner gleich Konstante

> Konstante

 Ausdruck größer Konstante

>= Konstante

 Ausdruck größer gleich Konstante

<> Konstante

 Ausdruck ungleich Konstante

Konstante1 To Konstante2

 Konstante1 <= Ausdruck <= Konstante2

 

 

 Die neuen Möglichkeiten Vergleiche in der Select Case Anweisung zu definieren sind neu in Version 1.71 eingeführt worden. Diese Erweiterung existiert nicht für CompactC switch Anweisungen.

 

Die Abarbeitung der Select Case Anweisung ist im Interpreter optimiert, da alle Werte in einer Sprungtabelle abgelegt werden. Daraus resultiert die Einschränkung das der berechnete Ausdruck immer als vorzeichenbehafteter 16 Bit Integer (-32768 .. 32667) ausgewertet wird. Ein "Case > 32767" ist daher nicht sinnvoll.

 

 

Exit Anweisung

 

Ein Exit verläßt die Select Case Anweisung.

 

Ist in einer Select Case Anweisung ein Else definiert, so werden die Anweisungen hinter Else ausgeführt, wenn keine Konstantenvergleich gefunden wurde, der erfüllt werden konnte.

 

Beispiel:

 

Select Case a+2

    Case 1

        b=b*2

    Case = 5*5

        b=b+2

    Case 100 And &Hf

        b=b/c

    Case < 10

        b=10

    Case <= 10

        b=11

    Case 20 To 30

        b=12

    Case > 100

        b=13

    Case >= 100

        b=14

    Case <> 25

        b=15

    Else

        b=b+2

End Case

 

 

In CompactC werden die Anweisungen hinter einer case Anweisung weitergeführt, bis ein break auftritt oder die switch Anweisung verlassen wird. Dies ist in BASIC anders: Hier bricht die Abarbeitung der Befehle hinter einem Case ab, wenn man bis zur nächsten Case Anweisung gelangt.