「列挙体」の版間の差分

提供: AB開発Wiki
ナビゲーションに移動検索に移動
(+Category:言語仕様)
 
7行目: 7行目:
  
 
=== 項目 ===
 
=== 項目 ===
'''Const'''
+
;Const
: Const修飾子を指定すると定数列挙体になります。省略するとタイプセーフ列挙体になります。
+
:Const修飾子を指定すると定数列挙体になります。省略するとタイプセーフ列挙体になります。
 
+
;Name
''Name''
+
:列挙体の名前を指定します。
: 列挙体の名前を指定します。
+
;Members
 
+
:関連する整数定数を定義します。
''Members''
 
: 関連する整数定数を定義します。
 
  
  
21行目: 19行目:
  
 
=== 例 ===
 
=== 例 ===
下記のコードサンプルは、メンバa,bを持ち合わせる列挙体uを定義しています。ABの列挙体は、メンバの右辺値として初期値が与えられていないときは、1からカウントされます。この例では、a=1、b=2の値を保有することになります。
+
下記のコードサンプルは、メンバa,bを持ち合わせる列挙体uを定義しています。ABの列挙体は、メンバの右辺値として初期値が与えられていないときは、1からカウントされます。この例では、a = 1、b = 2の値を保有することになります。
  
 
  Enum x
 
  Enum x
28行目: 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
38行目: 36行目:
  
 
  Enum x
 
  Enum x
     a=10
+
     a = 10
     b=20
+
     b = 20
     c=30
+
     c = 30
 
  End Enum
 
  End Enum
  
53行目: 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) + "です。"
  
69行目: 67行目:
 
  Public
 
  Public
 
     Sub EnumBase(value As Long, name As String)
 
     Sub EnumBase(value As Long, name As String)
         m_Value=value
+
         m_Value = value
         m_Name=name
+
         m_Name = name
 
     End Sub
 
     End Sub
 
     Sub ~EnumBase()
 
     Sub ~EnumBase()
80行目: 78行目:
 
   
 
   
 
     Sub Copy(ByRef obj As EnumBase)
 
     Sub Copy(ByRef obj As EnumBase)
         m_Value=obj.m_Value
+
         m_Value = obj.m_Value
         m_Name=obj.m_Name
+
         m_Name = obj.m_Name
 
     End Sub
 
     End Sub
 
   
 
   
98行目: 96行目:
 
  End Enum
 
  End Enum
  
  TypeDef x=Long
+
  TypeDef x = Long
  Const a=1
+
  Const a = 1
  Const b=2
+
  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