[ホーム] -> [顧問の戯れ言]

顧問の戯れ言

Visual Basic5 の Enum

1998年2月15日

前回予告した、Enum ステートメントについて、ちょっと話したいと思います。

MsgBox 関数などの引数を指定するときに、定数の候補が一覧にあらわれるのは知っているかと思います。結構便利な機能ですが、遅いマシンを使っている方や、候補から選ぶより自分で打った方が速い、と言う方は、使ってないかも知れませんが。Enum ステートメントは、任意にこの候補を出すことができるので便利なのです。例えば、引数が幾つかの数値しか持たない関数を作ったとしましょう。その数値を Enum を使い定義しておき、その引数の型を Enum の名前に指定します。そうすることによって、関数の引数を入力するときに、Enum のメンバーが候補として表示されます。分かりにくいかと思うので、具体例をあげましょう。

Public Enum eRound
    erKirisute
    erKiriage
    erSisyagonyu
End Enum

Public Function Round(ByVal Num As Double, _
                      ByVal Arg As eRound) As Long
    Select Case Arg
    Case erKirisute
        切り捨ての処理
    Case erKiriage
        切り上げの処理
    Case erSisyagonyu
        四捨五入の処理
    End Select
End Function

Round 関数は、小数点以下の値を丸めるための関数です(実際の処理は書かれていませんが)。1番目の引数に、浮動少数を取り、2番目の引数に指定された値に従い、切り捨て、切り上げ、四捨五入の処理を行います。これを呼び出す側で、Round 関数を記述しているときに、2番目の引数の候補に Enum eRound の3つのメンバー名が表示されるのです。これで、今までは「あれ、切り捨てを指定するのは 1 だったかな? 2 かな?」などと悩まなくて済むようになります。このテクニックは、関数以外でも、OLE サーバ(ActiveX Server)や、カスタムコントロール(ActiveX Control)などを作成するときにも役に立ちます。

ただし、注意点もあります。Enum のメンバーの型は Long 型固定です。文字などを表現することはできません。上から順番に 0, 1, 2 と数値が振られます。したがって、上の例だと、erKirisute = 0&, erKiriage = 1& ... となっています。もし、任意の数値を振りたい場合は、erKirisute = 10の様に数値を指定してください。ここら辺のことはヘルプに書いてあります(そうそう、VB5 になってヘルプの表示が遅くなって困りましたねぇ)。

もう一つの注意点は、メンバーの名前は、プロジェクト内で名前を一意にしないとだめな点です。これは、複数の Enum 内のメンバーの名前が重なってはいけないということです。これは、Enum が、単に定数(Const)をグループ化しただけのようなものだからです。これ、注意が必要です。名前付けに注意をしなければなりません。

うまく使えば、便利な Enum です。特に、複数人で開発をしていて、共通関数を作る人と、使う人が別々な場合に役に立つのではないでしょうか。自分で作った Enum 以外にも、組み込みの Enum が沢山あるので、オブジェクトブラウザ(ファンクションの2を押すと出てくるやつ)などを見て、いろいろ試してください。

さて、次回は・・・。うーん、もしかしたら間が開くかも。ちょっと今月、来月って忙しいから。なるべく更新間隔を短くしようとは思ってますけどね。戯れ言の部分を、本文を書くだけで一覧などを自動更新するように CGI 化したので文章さえ書けばすぐに更新できるんだけど・・・。ネタを考える時間が一番大変だったりして。

戻る