FreeBASIC マニュアルのトップに戻る

FreeBASIC Selectcase

目次→言語リファレンス→命令文→流れ制御命令SELECT CASE←オリジナル・サイト

SELECT CASE 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

条件文ブロック

構文:
Select Case expression
[ Case expressionlist]
[statements]
[ Case Else ]
[statements]
End Select
または
Select Case As Const integer_expression
[ Case constant | enumeration ]
[ statements ]
[ Case Else ]
[ statements ]
End Select

記述:

Select Case は、式の値に従って、特定のコードを実行します。
式は、一度評価されて、各 Case と比較します。順番に照合して、式の値と合致するものを見つけます。
合致したケース分岐の内側のコードが、実行されます。そして、プログラムは Select Case ブロックの最後の端までスキップします。
Case Else は、これまでに合わなかった、残りのケース合致します。このため、Case Else を入れておけば、少なくとも1つの Case が実行されることが、保証されます。
どの Case も合致しないと、Select Case ブロック全体が、スキップされます。

End Select は、Select Case...End Select ブックを閉じるのに使います。

Exit Select を使って、Select Case ブロックから脱け出て、Case ブロック内のそれ以降のコードが実行されないようにできます。

C ユーザへの注意:
FreeBASIC では、Select Case は、すべてのケースについて、最後に break をとる、switch ブロックのように作動します。
不成立にならないように、複数のオプションは、一つの Case の式リストに書かなければなりません。

整数型に加えて、浮動小数点、および文字列式が、上記の最初の構文でサポートされます。

式リストの構文:
{ expression | expression To expression | Is relational operator expression } [, ...]


Case で、値をコンマ (,) で切り離すことによって、複数の値をチェックをすることができます。
いったん合致を見つけると、プログラムは、チェックを終えて、その Case のブロックのコード命令文に、実行を移します。
更なる式は、評価されませんし、チェックもされません。

式リストの例:
Case 1 定数
Case 5.4 To 10.1範囲
Case Is > 3より大きい、より小さい
Case 1, 3, 5, 7 to 9値のセットに対して合致します
Case x 変数の値

As Const が使われるならば、値を求めることができるのは整数定数だけ(2つの浮動小数点定数(single と double) を除くすべての数の定数)で、式リストは、単純な定数と列挙だけをサポートします。
"To" 範囲は、サポートされます。しかし、"Is" 関係演算子は、サポートされません。

As Const を使うと、ジャンプ・テーブルは、処理される整数の Case の全範囲を含むように作られます。
このため、Select Case As ConstSelect Case よりも速くなります。
ただし、値の範囲のサイズには制限があり、値を uinteger 型に変換した後は、範囲の最大値は、最小値 +8191 以下になる可能性があります(現在の実装)。

注意: Select Case 命令文と最初の Case 命令文の間に命令文を配置することはできません。

例:
Dim choice As Integer

Input "Choose a number between 1 and 10: "; choice

Select Case As Const choice
Case 1
    Print "number is 1"
Case 2
    Print "number is 2"
Case 3, 4
    Print "number is 3 or 4"
Case 5 To 10
    Print "number is in the range of 5 to 10"
Case Else
    Print "number is outside the 1-10 range"
End Select


'' SELECT CASE vs. SELECT CASE AS CONST speed test

Const N = 50000000

Dim As Integer dummy = 0
Dim As Double t = Timer()

For i As Integer = 1 To N
    Select Case i
    Case 1, 3, 5, 7, 9
        dummy += 1
    Case 2, 4, 6, 8, 10
        dummy += 1
    Case 11 To 20
        dummy += 1
    Case 21 To 30
        dummy += 1
    Case 31
        dummy += 1
    Case 32
        dummy += 1
    Case 33
        dummy += 1
    Case Is >= 34
        dummy += 1
    Case Else
        Print "can't happen"
    End Select
Next

Print Using "SELECT CASE: ##.### seconds"; Timer() - t
t = Timer()

For i As Integer = 1 To N
    Select Case As Const i
    Case 1, 3, 5, 7, 9
        dummy += 1
    Case 2, 4, 6, 8, 10
        dummy += 1
    Case 11 To 20
        dummy += 1
    Case 21 To 30
        dummy += 1
    Case 31
        dummy += 1
    Case 32
        dummy += 1
    Case 33
        dummy += 1
    Case Else
        If( i >= 34 ) Then
            dummy += 1
        Else
            Print "can't happen"
        End If
    End Select
Next

Print Using "SELECT CASE AS CONST: ##.### seconds"; Timer() - t
Sleep


QBからの違い:
参照:
流れ制御命令 に戻る
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2021-09-28 09:51:00
日本語翻訳:WATANABE Makoto、原文著作者:SysOp

ホームページのトップに戻る

表示-非営利-継承