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

FreeBASIC ProPgEnumerations

目次→教本→プログラマーのための案内Constants and Enumerations←オリジナル・サイト

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

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

列挙(Enumeration)、いくつかの、名前付き 定数 で構成される、特別なユーザー定義型。

構文
Enum [typename [ Explicit ] ]
symbolname [= expression] [, ...]
...

End Enum

パラメータ
typename
Enum の名前
symbolname
定数の名前
expression
定数の式
Explicit
typename.symbolname によって、シンボルを明示的に参照する必要があることを要求します。

内容
列挙は、ユーザー定義型で、名前付き整数定数のセットで構成されます。
列挙は、特に状態が自然に進行する場合に、シーケンスと状態を定義するのに役立ちます。

列挙は、シンボルを介して名前付き定数として表される、値の範囲を記述する文脈を提供します。
名前空間とは異なり、列挙は任意のスコープ・ブロックで定義することができて、そのシンボルは、列挙が宣言されているスコープ範囲でのみ有効です。

列挙型は、シンボリックなので、保守しやすいコードに役立ちます。明示的な名前を使って、整数値を操作できます。
列挙は値の型です。 つまり、列挙には独自の値が含まれ、継承したり継承されたりすることはできません。

Enum には、メンバー手続きやメンバー・データ(シンボルのみ)を含めることはできません。しかし、持つことで Type に含めることができます(名前付きも名前なしも)。

用法
列挙内のすべてのシンボルには、列挙内の値の順序で、その場所に対応する整数値(正または負)が、黙示的に割り当てられます。
すべてのシンボルは、定数として扱われます。

デフォルトでは、最初の値には 0 が割り当てられ、次の値には 1 が割り当てられます。
ただし、任意のシンボルの値を、明示的に設定できます(次のシンボルは、前の値に 1 を加えた値に黙示的に設定されます)。

シンボルに与えられる値は、一意である必要はありません。

列挙が Explicit として修飾されている場合、すべての symbolname へのアクセスには、常に typename のプレフィックスが必要です。
プレフィックスは、他のエンティティとのあいまいさを解決するためにも、使えます。

Enum インスタンスは、ユーザ定義型インスタンスとして、手続きに渡すことができます(多重定義された演算子の定義を含む)。
Enum インスタンスのサイズは、常に Integer のサイズになります(定義されたシンボルの数に関係なく、単なるコンパイラー割り当ての宣言です)。

Enum インスタンス(または Enum シンボル)は、黙示的に整数に変換できます。

注:
- 多くの言語では、整数変数がスコープ付き列挙型インスタンスに暗黙的に変換されることはありません。逆も同様です。 後者は厳密に型指定され(FreeBASIC で Enum qualified as Explicit と同等の宣言)、このような変換には明示的な型変換が必要です 。
- しかし、FreeBASIC はこれを受け入れます(数値が定義されている Enum シンボルと一致しなくても)。これは、通常の Enum 機能に対する FreeBASIC の多くの欠点の1つです。
- そのため、実際の ENUM インスタンス(INTEGER としてのサイズ)を宣言することにはあまり興味がありませんが、そうでなければ、代わりに事前に組み込まれた任意の整数変数を宣言することができます。
- Explicit 修飾子を使わない(名前空間接頭辞を付けない)場合、定数の単純な離散リストと比較して、ENUM 構造を使っても、値の自動増加を除いてあまり意味がありません。

簡単な使用例:

Enum Colors
    black
    blue
    green
    cyan
    red
    pink
    yellow
    grey
    dark_grey
    bright_blue
    bright_green
    bright_cyan
    bright_red
    bright_pink
    bright_yellow
    white
End Enum

Sub print_fbc (ByVal foreground As Colors, ByVal background As Colors)
    Color foreground, background
    Print " " & __FB_SIGNATURE__ & " "
End Sub


Dim As Colors std_foreground, std_background
std_foreground = LoWord(Color())
std_background = HiWord(Color())

Dim As Colors my_foreground, my_background
my_foreground = bright_yellow
my_background = cyan

print_fbc(my_foreground, my_background)

Color std_foreground, std_background
Print "end"

Sleep

同じ結果ですが、Enum インスタンスに数値を割り当てるときに、明示的に型変換するように、Enum をインターフェイスする Type を使います(上記の「注意」を参照):

Enum Colors Explicit
    black
    blue
    green
    cyan
    red
    pink
    yellow
    grey
    dark_grey
    bright_blue
    bright_green
    bright_cyan
    bright_red
    bright_pink
    bright_yellow
    white
End Enum

Type Console_Colors
    Public:
        Declare Property foreground () As Colors
        Declare Property foreground (ByVal c As Colors)
        Declare Property background () As Colors
        Declare Property background (ByVal c As Colors)
    Private:
        Dim As Colors _foreground
        Dim As Colors _background
End Type

Property Console_Colors.foreground () As Colors
    Return This._foreground
End Property

Property Console_Colors.foreground (ByVal c As Colors)
    This._foreground = c
End Property

Property Console_Colors.background () As Colors
    Return This._background
End Property

Property Console_Colors.background (ByVal c As Colors)
    This._background = c
End Property

Sub print_fbc (ByVal foreground As Colors, ByVal background As Colors)
    Color foreground, background
    Print " " & __FB_SIGNATURE__ & " "
End Sub


Dim As Console_Colors std_colors
std_colors.foreground = Cast(Colors, LoWord(Color()))  '' プロパティ宣言のために明示的なキャストが必須
std_colors.background = Cast(Colors, HiWord(Color()))  '' プロパティ宣言のために明示的なキャストが必須

Dim As Console_Colors my_colors
my_colors.foreground = Colors.bright_yellow
my_colors.background = Colors.cyan

print_fbc(my_colors.foreground, my_colors.background)

Color std_colors.foreground, std_colors.background
Print "end"

Sleep

参照
プログラマーのための案内に戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2021-01-23 09:57:02
日本語翻訳:WATANABE Makoto、原文著作者:fxm

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

表示-非営利-継承