「列挙体」の版間の差分

提供: 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の列挙体はメンバの値は勿論のこと、メンバの名前を参照することもできます。下記にメンバの値と名前を取得するサンプルコードを示します。
+
列挙体が保有する列挙メンバを参照する場合は、"列挙体.メンバ" のように記述します。ABの列挙体はメンバの値は勿論のこと、メンバの名前を取得することもできます。下記にメンバの値と名前を取得するサンプルコードを示します。
  
  Enum x
+
  Enum Class x
 
     a
 
     a
 
     b
 
     b
54行目: 61行目:
  
  
== 列挙体の基底クラス ==
+
=== 列挙体の基底クラス(EnumBaseクラス) ===
ABで定義するすべての列挙体は下記に示す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