SELECT CASE

FreeBASIC-Referenz » Alphabetische Befehlsreferenz » S » SELECT CASE

Syntax:

SELECT CASE [AS CONST] Ausdruck
CASE (Ausdrucksliste)
  ' Code
[CASE (Ausdrucksliste2)
  ' Code ]
[ ... ]
[CASE ELSE
  ' Code ]
END SELECT

Typ: Anweisung
Kategorie: Bedingungen

SELECT CASE führt, abhängig vom Wert eines Ausdrucks, bestimmte Codeteile aus.

SELECT CASE stellt eine etwas übersichtlichere Form dar von:

IF Ausdruck = Ausdrucksliste1 THEN
   ' Code
[ ELSEIF Ausdruck = Ausdrucksliste2 THEN
   ' Code ]
[ ... ]
[ ELSE
   ' Code ]
END IF

Da nicht in jeder Zeile erneut 'Ausdruck =' geschrieben werden muss, erspart sich der Programmierer Tipparbeit. Außerdem ist schneller ersichtlich, welche Bedingung geprüft wird.

Der in 'Ausdruck' bzw. 'Ausdrucksliste' verwendete Datentyp kann eine Ganzzahl (z. B. INTEGER), Gleitkommazahl (z. B. DOUBLE) oder ein STRING, ZSTRING oder WSTRING sein. Nicht zulässig sind hingegen UDTs. UDT-Records hingegen dürfen selbstverständlich benutzt werden, sofern sie von einem einfachen Datentyp sind. Records, die einem Bitfeld entstammen, können erst seit FreeBASIC v0.16 eingesetzt werden. Siehe dazu auch die FB-Datentypen und Bitfelder.

Als Block-Anweisung initialisiert SELECT CASE seit FreeBASIC v0.16 einen SCOPE-Block, der mit der Zeile END SELECT endet. Variablen, die nach einem 'CASE Ausdrucksliste' deklariert werden, sind nur bis zum Ende des SELECT-Blocks gültig.

SELECT-CASE-Blocks dürfen bis zu beliebigen Level ineinander verschachtelt werden.

Syntax einer Ausdrucksliste (hinter CASE):

{ Ausdruck [TO Ausdruck] | IS (Bedingungsoperator) Ausdruck} [, ...]

Beispiele für Ausdrucksliste

SELECT CASE a
' ist a = 5?
  CASE 5
' ist a zwischen 5 und 10?
' Die kleinere Zahl muss zuerst angegeben werden
  CASE 5 TO 10
' ist a größer als 5?
  CASE IS > 5
' ist a entweder 1 oder zwischen 3 und 10?
  CASE 1, 3 TO 10
' ist a gleich 1, 3, 5, 7 oder b + 8?
  CASE 1, 3, 5, 7, b + 8
END SELECT

Beispiel für die Benutzung von SELECT CASE:

DIM AS INTEGER wahl
INPUT "Geben Sie eine Nummer zwischen 1 und 10 ein: ", wahl
SELECT CASE wahl
  CASE 1
    PRINT "Sie haben 1 angegeben"
  CASE 2
    PRINT "Die Zahl ist 2"
  CASE 3, 4
    PRINT "Die Zahl ist 3 oder 4"
  CASE 5 TO 10
    PRINT "Die Zahl liegt zwischen 5 und 10"
  CASE IS > 10
    PRINT "Die Zahl ist größer als 10"
  CASE ELSE
    PRINT "Die Zahl ist kleiner als 1"
END SELECT
SLEEP

Die Zeileneinrückungen sind optional; sie dienen lediglich der besseren Übersichtlichkeit. In Programmiererkreisen sind sie in jedem Falle gern gesehen.

Wenn eine Bedingung doppelt vorkommt, wird nur der erste Codeblock ausgeführt.

Beispiel:

SELECT CASE a
  CASE 1
    PRINT "a ist 1"
  CASE 1, 2
    PRINT "a ist entweder 1 oder 2"
END SELECT

Die Zeile "a ist entweder 1 oder 2" wird nur angezeigt, wenn a = 2 ist. Im anderen Fall a = 1 wird nur die Zeile "a ist 1" ausgegeben.

Beachten Sie bitte, dass die Ausdrücke in der Reihenfolge abgearbeitet werden, in der sie angegeben werden. Im obigen Beispiel wird also zuerst geprüft, ob a = 1 ist, danach ob a = 2 ist, usw. Wenn sehr häufig solche Prüfungen stattfinden, sollten Sie daher das wahrscheinlichste Ergebnis an die Spitze der Liste stellen, um nicht zu viel Zeit zu verlieren.

In frühen Formen der Sprachfamilie BASIC wurde das Konstrukt ON ... GOTO bzw. ON ... GOSUB eingesetzt, um solche Prüfstrukturen umzusetzen. Dies gilt inzwischen als veraltete und umständliche Technik.

SELECT CASE AS CONST
Bei dieser Version wird der Code effizienter umgesetzt, so dass das Programm die Entscheidungen schneller treffen kann. Allerdings gelten hier bestimmte Beschränkungen für 'Ausdruck' und 'Ausdrucksliste':

CASE ELSE ist mit SELECT CASE AS CONST zulässig.

Durch diese Einschränkungen ist die Abfrage um einiges schneller als das normale SELECT CASE.
Man spricht von 'spürbaren' Unterschieden bei mehr als vier CASE-Zeilen.

Unterschiede zu QB:

Unterschiede zu früheren Versionen von FreeBASIC:

Siehe auch:
IF ... THEN, IIF, ON ... GOTO, ON ... GOSUB, SCOPE, EXIT, CONST, CONST (Klausel), Ausdrücke, Bedingungsstrukturen