自分なりの解釈で、あまり無理をしない簡単なデザインパターンのイテレータ(iterator)もどき
基本的な機能はcollectionオブジェクトを使っているので、
コード量を少ないことと、出力時に”For Each”がつかえるメリットがある。
— CAggregate.cls(データクラスを集約管理し出力するクラス)
Dim m_collection As VBA.Collection ‘このオブジェクトがキモ
Private Sub Class_Initialize()
Set m_collection = New VBA.Collection
End SubPrivate Sub Class_Terminate()
End Sub
Public Sub add(iterator As CIterator)
Call m_collection.add(iterator)
End SubPublic Property Get iterator() As Collection
Set iterator = m_collection
End Property
— CIterator.cls(反復演算子(といっても実態はデータを格納しているクラス)
Public name As String
Public age As IntegerPrivate Sub Class_Initialize()
End Sub
Private Sub Class_Terminate()
End Sub
— MainForTest.bas(使い方の例)
Sub iteratorTest()
Dim aggregate As CAggregate
Set aggregate = New CAggregate
‘インプット情報
Dim iterator As CIterator
Set iterator = New CIterator
iterator.name = "太朗"
iterator.age = 10
Call aggregate.add(iterator)
Set iterator = Nothing
Set iterator = New CIterator
iterator.name = "花子"
iterator.age = 12
Call aggregate.add(iterator)
Set iterator = NothingSet iterator = New CIterator
iterator.name = "hoge"
iterator.age = 30
Call aggregate.add(iterator)
Set iterator = Nothing
‘アウトプット For Each で出力
Dim chkIterator As CIterator
For Each chkIterator In aggregate.iterator
Debug.Print chkIterator.name & chkIterator.age
Next chkIterator
End Sub
コメント