定数

提供: AB開発Wiki
移動先:案内検索

定数とは初期化のタイミング以外で値を変更できない識別子のことを言います。グローバル領域またはローカル領域で定義することができ、参照方法は変数と同様です。

定数はオブジェクトメンバ及びクラスの静的メンバとして持つこともできます。


定数の定義

'一般の定数
Const name = expression

'定数マクロ
Const macro('args') = expression


項目

namemacro

定数名または定数マクロ名を指定します。

args

マクロの場合はカッコ内にパラメータを指定します。カンマで区切って複数指定できます。置換ベースのマクロなので、型指定などは必要ありません。

expression

式を書きます。


備考

定数の初期値として代入する値がリテラル値の場合は、コンパイル時、その定数が参照される箇所にはリテラル値が置換されます。 定数の初期値が動的に変化する可能性を含む場合(変数や関数の戻り値など)は一般の変数と同様の領域に値が保有されます。この場合、初期化以外の場所で定数の値を変更しようとした場合、コンパイルエラーになります。また、このような定数を参照渡しパラメータとして指定することはできません。


オブジェクト メンバとしての定数

Classステートメント内にも定数を記述することができます。この場合、定数の初期化はコンストラクタでのみ行えます。コンストラクタ以外のメソッドや外部からメンバ定数の値を書き換えようとした場合、コンパイルエラーになります。

Class Foo
    Const N As Long
Public
    Sub Foo()
        N=100
    End Sub

    Sub Baz()
        'コンパイルエラー
        N=200
    End Sub

    ...

End Class


クラスの静的メンバとしての定数

Classステートメント内においてStatic宣言で定数を定義した場合、その定数はクラスの静的メンバ定数になります。初期化はConstステートメントの右辺に指定します。

Class Foo
    Static Const N = 100 As Long 
    ...
End Class

定数の型がクラスの場合

一般的に定数というと、リテラル値または書き換え不可能な数値型として把握されがちですが、定数にはクラス型を指定することもできます(以下、オブジェクト定数)。

オブジェクト定数はそのクラスの内容を書き換えることは出来ません。一般的にメソッドを呼び出すこともできません。ただし、すべてのメソッドが呼べないとなると、クラスの機能を全く利用できなくなってしまいますので、下記の宣言がなされているメソッドのみ、例外的に呼び出すことが可能になっています。

Class Foo

Public
    x As Long

    Sub Foo( x As Long )
        This.x = x
    End Sub

    Const Sub Method1()
        ...
    End Sub

    Sub Method2()
        ...
    End Sub

End Class

Const obj As Foo(100)

'正常(Constなメソッドは呼び出し可能)
obj.Method1()

'一般メソッドを呼び出すとエラー
obj.Method2()

'オブジェクトの内容を書き換えようとしてもエラー
obj.x = 200