連載
» 2007年02月15日 00時00分 公開

基礎解説 演習方式で身につけるチェック式WSH超入門:第9回 VBScriptのオブジェクトを使いこなす (4/4)

[牟田口大介(Microsoft MVP Visual Developer - Scripting),著]
前のページへ 1|2|3|4       

 メソッドの定義はSubステートメントを用いる。Subプロシージャと基本は同じであるが、クラスの外部から呼び出し可能という意味があるPublicキーワードを併用する(省略してもよい)。

Option Explicit

Class Sample
    'Captionプロパティ。
    Public Caption

    'Showメソッド。
    Public Sub Show()
        MsgBox Me.Caption
    End Sub
End Class

'オブジェクト変数の宣言。
Dim objSample1
'オブジェクトの作成。
Set objSample1 = New Sample
'オブジェクトのプロパティに値を代入。
objSample1.Caption = "ひどいゲマー!"
'オブジェクトのメソッドを実行。
objSample1.Show
'オブジェクト変数の破棄。
Set objSample1 = Nothing

 このスクリプトを実行すると次のような結果が得られる。

メソッドの実行例
Showメソッドによりメッセージ・ボックスが表示される。

 ここではSubステートメントを使って、Showメソッドを定義している。Meキーワードには、クラスがインスタンス化されたときのオブジェクトが代入される。ここではそのCaptionプロパティを参照し、その内容をメッセージ・ボックスとして表示している。

 このサンプルでは引数のない単純なメソッドを1つ定義しただけだが、実際は引数を持つメソッドを複数定義することが可能である。

 最後に、今回の総まとめとして1つのクラスを作成し、そのインスタンスを扱ってみよう。ここでは、「円」を表すクラスCircleを考える。Circleクラスには半径を表すRadiusプロパティ、直径を表すDiameterプロパティ、面積を表すAreaプロパティを設ける。この中でRadiusプロパティだけは値の設定も可能にしたい(半径が決まると、直径と面積も決まるからである)。また、Circleオブジェクトの詳細をメッセージ・ボックスで表示させるメソッドShowDetailを用意する。ShowDetailには引数として何の要素(半径? 直径? 面積? 全部?)を得るかを指定できるようにする。これらの要件を満たすクラスを記述していく。

CHECK!

マーカーで隠れたところを選択してチェックしてみよう。


Option Explicit

'クラス名:Circleを定義する。
Class Circle
    'プライベート変数m_dblRadius(円の半径)を宣言。
    Private m_dblRadius
    'プライベート変数m_dblPi(円周率)を宣言。
    Private m_dblPi

    'クラスのコンストラクタ。
    Private Sub Class_Initialize()
        '円周率の値と、半径のデフォルト値を設定。
        m_dblPi = 4 * Atn(1)
        m_dblRadius = 0
    End Sub

    'Diameterプロパティ(円の直径)の値を取得。
    Public Property Get Diameter
        '円の直径=(半径)× 2
        Diameter = m_dblRadius * 2
     End Property

    'Areaプロパティ(円の面積)の値を取得。
    Public Property Get Area
        '円の面積=(半径)×(半径)× (円周率)
        Area = m_dblRadius ^ 2 * m_dblPi
    End Property

    'Radiusプロパティ(円の半径)の値を設定。
    Public Property Let Radius(Value)
        '数値以外のものが代入された場合、型不一致エラーを発生させる。
        If IsNumeric(Value) Then
            m_dblRadius = Value
        Else
            Err.Raise 13
        End If
    End Property

    'Radiusプロパティ(円の半径)の値を取得。
    Public Property Get Radius
        Radius = m_dblRadius
    End Property

    'ShowDetailメソッドを定義。円オブジェクトの詳細を表示する。
    '引数strElementには取得する値の種類を文字列で指定する。
    Public Sub ShowDetail(strElement)
        'strElementに格納された文字列によって場合分け。
        Select Case strElement
            Case "Radius"
                MsgBox "半径:" & Me.Radius
            Case "Diameter"
                MsgBox "直径:" & Me.Diameter
            Case "Area"
                MsgBox "面積:" & Me.Area
            Case Else
                MsgBox "半径:" & Me.Radius & vbCrLf & _
                       "直径:" & Me.Diameter & vbCrLf & _
                       "面積:" & Me.Area
         End Select
    End Sub
End Class

'オブジェクト変数objCircle1を宣言。
Dim objCircle1
'objCircle1にCircleクラスのインスタンスを代入。
Set objCircle1 = New Circle
'Radiusプロパティに値を代入。
objCircle1.Radius = 2
'Areaプロパティを参照。
MsgBox "円の面積は、" & objCircle1.Area
'ShowDatailメソッドの呼び出し。
objCircle1.ShowDetail ""
'オブジェクトの破棄。
Set objCircle1 = Nothing

 少し長いスクリプトになったが、いかがだろうか? クラスを定義し、そのインスタンスを作成しオブジェクトとして扱う一連の手順を追ってもらいたい。

 今回はVBScriptにおけるオブジェクトの利用法と、その設計図であるクラスを記述する方法について学んだ。次回からはスクリプト・ホストとしてのWSHが持つオブジェクトについて、その詳細と使い方について説明していく。


「基礎解説 演習方式で身につけるチェック式WSH超入門」のインデックス

基礎解説 演習方式で身につけるチェック式WSH超入門

前のページへ 1|2|3|4       

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。