Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - SELECT CASE

Referenz-Navigation

 

Syntax:

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

Typ: Anweisung
Kategorie: Programmablauf

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. BefehlsreferenzeintragINTEGER), Gleitkommazahl (z. B. BefehlsreferenzeintragDOUBLE) oder ein BefehlsreferenzeintragSTRING, BefehlsreferenzeintragZSTRING oder BefehlsreferenzeintragWSTRING sein. Nicht zulässig sind hingegen BefehlsreferenzeintragUDTs. UDT-Records hingegen dürfen selbstverständlich benutzt werden, sofern sie von einem einfachen Datentyp sind. Siehe dazu auch die BefehlsreferenzeintragFB-Datentypen.

Als Block-Anweisung initialisiert SELECT CASE einen BefehlsreferenzeintragSCOPE-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 einem 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 ein Wert von 5 bis 10?
' Die kleinere Zahl muss zuerst angegeben werden
  CASE 5 TO 10
' ist a größer als 5?
  CASE IS > 5
' ist a gleich 1 oder ein Wert von 3 bis 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 Zahl von 1 bis 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 im Bereich von 5 bis 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 BefehlsreferenzeintragON ... GOTO bzw. BefehlsreferenzeintragON ... 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:
BefehlsreferenzeintragIF ... THEN, BefehlsreferenzeintragIIF, BefehlsreferenzeintragON ... GOTO, BefehlsreferenzeintragON ... GOSUB, BefehlsreferenzeintragSCOPE, BefehlsreferenzeintragEXIT, BefehlsreferenzeintragCONST, BefehlsreferenzeintragCONST (Klausel), BefehlsreferenzeintragAusdrücke, BefehlsreferenzeintragBedingungsstrukturen


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 31.07.2007 von Redakteurnemored angelegt.
  • Die aktuellste Version wurde am 03.10.2015 von Redakteurnemored gespeichert.
  Versionen Versionen