「列挙体」の版間の差分
提供:AB開発Wiki
ナビゲーションに移動検索に移動
編集の要約なし |
編集の要約なし |
||
1行目: | 1行目: | ||
列挙体は関連する整数定数の集合を定義するために利用します。ABの列挙体には、列挙メンバを単なる定数値として扱うモードと、タイプセーフな列挙オブジェクトとして扱うモードの2通りの利用方法があります。 | |||
== 列挙体の定義 == | == 列挙体の定義 == | ||
'''Enum''' ''Name'' | '''Enum''' ['''Class'''] ''Name'' | ||
''Members'' | ''Members'' | ||
'''End Enum''' | '''End Enum''' | ||
=== 項目 === | === 項目 === | ||
'''Class''' | |||
: Class修飾子を指定するとタイプセーフ列挙体になります。省略すると定数列挙体になります。 | |||
''Name'' | ''Name'' | ||
: 列挙体の名前を指定します。 | : 列挙体の名前を指定します。 | ||
12行目: | 15行目: | ||
''Members'' | ''Members'' | ||
: 関連する整数定数を定義します。 | : 関連する整数定数を定義します。 | ||
== タイプセーフ列挙体 == | |||
列挙体をEnumBaseの派生クラスとして管理します。異なる列挙型オブジェクトへの代入が禁止され、定数列挙体と比較してコードミスの軽減が期待できます。この他、列挙メンバ名の取得が可能になるなど、付加機能を利用できます。 | |||
=== 例 === | === 例 === | ||
下記のコードサンプルは、メンバa,bを持ち合わせる列挙体uを定義しています。ABの列挙体は、メンバの右辺値として初期値が与えられていないときは、1からカウントされます。この例では、a=1、b=2の値を保有することになります。 | 下記のコードサンプルは、メンバa,bを持ち合わせる列挙体uを定義しています。ABの列挙体は、メンバの右辺値として初期値が与えられていないときは、1からカウントされます。この例では、a=1、b=2の値を保有することになります。 | ||
Enum x | Enum Class x | ||
a | a | ||
b | b | ||
23行目: | 30行目: | ||
下記のように初期値を指定した場合、a=0、b=1という具合になります。 | 下記のように初期値を指定した場合、a=0、b=1という具合になります。 | ||
Enum x | Enum Class x | ||
a=0 | a=0 | ||
b | b | ||
30行目: | 37行目: | ||
初期以降のメンバは自動的に前のメンバに1をプラスした値となりますが、下記のようにすべてのメンバの値を指定することもできます。 | 初期以降のメンバは自動的に前のメンバに1をプラスした値となりますが、下記のようにすべてのメンバの値を指定することもできます。 | ||
Enum x | Enum Class x | ||
a=10 | a=10 | ||
b=20 | b=20 | ||
37行目: | 44行目: | ||
== | === タイプセーフ列挙体の値を参照する === | ||
列挙体が保有する列挙メンバを参照する場合は、"列挙体.メンバ" のように記述します。ABの列挙体はメンバの値は勿論のこと、メンバの名前を取得することもできます。下記にメンバの値と名前を取得するサンプルコードを示します。 | |||
Enum x | Enum Class x | ||
a | a | ||
b | b | ||
54行目: | 61行目: | ||
== | === 列挙体の基底クラス(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 | |||
== 定数列挙体 == | |||
Class修飾子を省略すると、列挙メンバは定数として定義されます。例えば、下記の2つのコードは同一の意味になります。 | |||
Enum x | |||
a | |||
b | |||
End Enum | |||
TypeDef x=Long | |||
Const a=1 | |||
Const b=2 |
2006年10月24日 (火) 07:52時点における版
列挙体は関連する整数定数の集合を定義するために利用します。ABの列挙体には、列挙メンバを単なる定数値として扱うモードと、タイプセーフな列挙オブジェクトとして扱うモードの2通りの利用方法があります。
列挙体の定義
Enum [Class] Name Members End Enum
項目
Class
- Class修飾子を指定するとタイプセーフ列挙体になります。省略すると定数列挙体になります。
Name
- 列挙体の名前を指定します。
Members
- 関連する整数定数を定義します。
タイプセーフ列挙体
列挙体をEnumBaseの派生クラスとして管理します。異なる列挙型オブジェクトへの代入が禁止され、定数列挙体と比較してコードミスの軽減が期待できます。この他、列挙メンバ名の取得が可能になるなど、付加機能を利用できます。
例
下記のコードサンプルは、メンバa,bを持ち合わせる列挙体uを定義しています。ABの列挙体は、メンバの右辺値として初期値が与えられていないときは、1からカウントされます。この例では、a=1、b=2の値を保有することになります。
Enum Class x a b End Enum
下記のように初期値を指定した場合、a=0、b=1という具合になります。
Enum Class x a=0 b End Enum
初期以降のメンバは自動的に前のメンバに1をプラスした値となりますが、下記のようにすべてのメンバの値を指定することもできます。
Enum Class x a=10 b=20 c=30 End Enum
タイプセーフ列挙体の値を参照する
列挙体が保有する列挙メンバを参照する場合は、"列挙体.メンバ" のように記述します。ABの列挙体はメンバの値は勿論のこと、メンバの名前を取得することもできます。下記にメンバの値と名前を取得するサンプルコードを示します。
Enum Class 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
定数列挙体
Class修飾子を省略すると、列挙メンバは定数として定義されます。例えば、下記の2つのコードは同一の意味になります。
Enum x a b End Enum
TypeDef x=Long Const a=1 Const b=2