[ホーム] -> [顧問の戯れ言] |
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 化したので文章さえ書けばすぐに更新できるんだけど・・・。ネタを考える時間が一番大変だったりして。