|
Navigation: Compiler > BASIC > Kontrollstrukturen > 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.