動的配列から Collection へ
いろいろな方法がある中で、今回は型チェックができて実装が簡単な Collection をメンバーにもつクラスを作成することにしました。元のコードは
Public Type MyType Name As String Datum As String Value As Long End Type ' Dim ary() As MyType と宣言して ' ary(n).Name ' ary(n).Value と扱える
のような感じのコードでした。これを、
Private Names As Collection Private Data As Collection Private Values As Collection Private Sub Class_Initialize() Set Names = New Collection Set Data = New Collection Set Values = New Collection End Sub Private Sub Class_Terminate() Set Names = Nothing Set Data = Nothing Set Values = Nothing End Sub Public Sub Add(Name as String, Datum as String, Value As Long) Names.Add Name Data.Add Datum Values.Add Value End Sub Public Property Get Item(Index as Long) as MyType MyType.Name = Names(Index) MyType.Datum = Data(Index) MyType.Value = Values(Index) ENd Property ' Item がデフォルトプロパティならば ' col(n).Name ' col(n).Value と、動的配列と同じ書式で扱えるはず
のように書き換えたかったのですが、MyType を戻り値にできないというエラーの内容が理解できず、解決策を調べる時間が惜しいので
Public Property Get Name(Index as Long) as String Name = Names(Index) ENd Property Public Property Get Value(Index as Long) as Long Name = CLng(Values(Index)) ENd Property ' ary(n).Name のかわりに col.Name(n) ' ary(n).Value のかわりに col.Value(n) と書く必要がある
と、消極的な対処にしてしまい、多少の肉付けをして動的配列からコレクションへと移行完了しました。
蛇足ですが、Data は Datum の複数形ですので、Datas などと書いていると、いつか笑われてしまう日が来る……らしいです。
今の仕事環境には辞書が入ってないので、変数名や関数名に英単語を使うときにはスペルミスなどをあとからツッコミいれられるのがちょっと怖いです(苦笑)