「列挙体」の版間の差分
提供: AB開発Wiki
ナビゲーションに移動検索に移動細 (+Category:言語仕様) |
|||
(他の1人の利用者による、間の2版が非表示) | |||
1行目: | 1行目: | ||
− | + | 列挙体は関連する整数定数の集合を定義するために利用します。ABの列挙体には、列挙メンバを単なる定数値として扱うモードと、タイプセーフな列挙オブジェクトとして扱うモードの2通りの利用方法があります。 | |
== 列挙体の定義 == | == 列挙体の定義 == | ||
− | '''Enum''' ''Name'' | + | ['''Const'''] '''Enum''' ''Name'' |
''Members'' | ''Members'' | ||
'''End Enum''' | '''End Enum''' | ||
=== 項目 === | === 項目 === | ||
− | + | ;Const | |
− | : 列挙体の名前を指定します。 | + | :Const修飾子を指定すると定数列挙体になります。省略するとタイプセーフ列挙体になります。 |
+ | ;Name | ||
+ | :列挙体の名前を指定します。 | ||
+ | ;Members | ||
+ | :関連する整数定数を定義します。 | ||
− | + | ||
− | + | == タイプセーフ列挙体 == | |
+ | 列挙体をEnumBaseの派生クラスとして管理します。異なる列挙型オブジェクトへの代入が禁止され、定数列挙体と比較してコードミスの軽減が期待できます。この他、列挙メンバ名の取得が可能になるなど、付加機能を利用できます。 | ||
=== 例 === | === 例 === | ||
− | 下記のコードサンプルは、メンバa,bを持ち合わせる列挙体uを定義しています。ABの列挙体は、メンバの右辺値として初期値が与えられていないときは、1からカウントされます。この例では、a=1、b=2の値を保有することになります。 | + | 下記のコードサンプルは、メンバa,bを持ち合わせる列挙体uを定義しています。ABの列挙体は、メンバの右辺値として初期値が与えられていないときは、1からカウントされます。この例では、a = 1、b = 2の値を保有することになります。 |
Enum x | Enum x | ||
21行目: | 26行目: | ||
End Enum | End Enum | ||
− | 下記のように初期値を指定した場合、a=0、b=1という具合になります。 | + | 下記のように初期値を指定した場合、a = 0、b = 1という具合になります。 |
Enum x | Enum x | ||
− | a=0 | + | a = 0 |
b | b | ||
End Enum | End Enum | ||
31行目: | 36行目: | ||
Enum x | Enum x | ||
− | a=10 | + | a = 10 |
− | b=20 | + | b = 20 |
− | c=30 | + | c = 30 |
End Enum | End Enum | ||
− | == | + | === タイプセーフ列挙体の値を参照する === |
− | + | 列挙体が保有する列挙メンバを参照する場合は、"列挙体.メンバ" のように記述します。ABの列挙体はメンバの値は勿論のこと、メンバの名前を取得することもできます。下記にメンバの値と名前を取得するサンプルコードを示します。 | |
Enum x | Enum x | ||
46行目: | 51行目: | ||
Dim i As Long | Dim i As Long | ||
− | i=x.a | + | i = x.a |
Print "列挙体xのメンバ" + x.a.ToString() + "の値は" + Str$(i) + "です。" | Print "列挙体xのメンバ" + x.a.ToString() + "の値は" + Str$(i) + "です。" | ||
54行目: | 59行目: | ||
− | == | + | === 列挙体の基底クラス(EnumBaseクラス) === |
− | + | ABで定義するすべてのタイプセーフ列挙体は下記に示すEnumBaseクラスを継承しています。 | |
+ | |||
+ | Class EnumBase | ||
+ | m_Value As Long | ||
+ | m_Name As String | ||
+ | Public | ||
+ | Sub EnumBase(value As Long, name As String) | ||
+ | m_Value = value | ||
+ | m_Name = name | ||
+ | End Sub | ||
+ | Sub ~EnumBase() | ||
+ | End Sub | ||
+ | |||
+ | Function ToString() As String | ||
+ | Return m_Name | ||
+ | End Function | ||
+ | |||
+ | Sub Copy(ByRef obj As EnumBase) | ||
+ | m_Value = obj.m_Value | ||
+ | m_Name = obj.m_Name | ||
+ | End Sub | ||
+ | |||
+ | Function Operator() As Long | ||
+ | Return m_Value | ||
+ | End Function | ||
+ | End Class | ||
+ | |||
+ | |||
+ | == 定数列挙体 == | ||
+ | Const修飾子を指定すると、列挙メンバは定数として定義されます。例えば、下記の2つのコードは同一の意味になります。定数列挙体はWin32APIなど、過去のC/C++系ライブラリとの互換性に優れます。 | ||
+ | |||
+ | Const Enum x | ||
+ | a | ||
+ | b | ||
+ | End Enum | ||
+ | |||
+ | TypeDef x = Long | ||
+ | Const a = 1 | ||
+ | Const b = 2 | ||
− | + | [[Category:言語仕様|れつきよたい]] |
2007年8月6日 (月) 02:42時点における最新版
列挙体は関連する整数定数の集合を定義するために利用します。ABの列挙体には、列挙メンバを単なる定数値として扱うモードと、タイプセーフな列挙オブジェクトとして扱うモードの2通りの利用方法があります。
列挙体の定義
[Const] Enum Name Members End Enum
項目
- Const
- Const修飾子を指定すると定数列挙体になります。省略するとタイプセーフ列挙体になります。
- Name
- 列挙体の名前を指定します。
- Members
- 関連する整数定数を定義します。
タイプセーフ列挙体
列挙体をEnumBaseの派生クラスとして管理します。異なる列挙型オブジェクトへの代入が禁止され、定数列挙体と比較してコードミスの軽減が期待できます。この他、列挙メンバ名の取得が可能になるなど、付加機能を利用できます。
例
下記のコードサンプルは、メンバa,bを持ち合わせる列挙体uを定義しています。ABの列挙体は、メンバの右辺値として初期値が与えられていないときは、1からカウントされます。この例では、a = 1、b = 2の値を保有することになります。
Enum x a b End Enum
下記のように初期値を指定した場合、a = 0、b = 1という具合になります。
Enum x a = 0 b End Enum
初期以降のメンバは自動的に前のメンバに1をプラスした値となりますが、下記のようにすべてのメンバの値を指定することもできます。
Enum x a = 10 b = 20 c = 30 End Enum
タイプセーフ列挙体の値を参照する
列挙体が保有する列挙メンバを参照する場合は、"列挙体.メンバ" のように記述します。ABの列挙体はメンバの値は勿論のこと、メンバの名前を取得することもできます。下記にメンバの値と名前を取得するサンプルコードを示します。
Enum x a b End Enum Dim i As Long i = x.a Print "列挙体xのメンバ" + x.a.ToString() + "の値は" + Str$(i) + "です。"
実行結果は下記のように出力されます。
列挙体xのメンバaの値は1です。
列挙体の基底クラス(EnumBaseクラス)
ABで定義するすべてのタイプセーフ列挙体は下記に示すEnumBaseクラスを継承しています。
Class EnumBase m_Value As Long m_Name As String Public Sub EnumBase(value As Long, name As String) m_Value = value m_Name = name End Sub Sub ~EnumBase() End Sub Function ToString() As String Return m_Name End Function Sub Copy(ByRef obj As EnumBase) m_Value = obj.m_Value m_Name = obj.m_Name End Sub Function Operator() As Long Return m_Value End Function End Class
定数列挙体
Const修飾子を指定すると、列挙メンバは定数として定義されます。例えば、下記の2つのコードは同一の意味になります。定数列挙体はWin32APIなど、過去のC/C++系ライブラリとの互換性に優れます。
Const Enum x a b End Enum
TypeDef x = Long Const a = 1 Const b = 2