連載
プロフェッショナルVB.NETプログラミング
第2回 データ型の処理
(株)ピーデー
川俣 晶
2002/04/11
|
|
配列の次元数の変更
VB 6では、ReDimで配列のサイズを変更する際、配列の次元数は問題にされない。つまり、最初に宣言されたときに2次元配列であることが明示されていない配列を、2次元配列にReDimしても正常に動作するということでる。以下はそれを示したサンプル・ソースである。
1: Private Sub Form_Load()
2: Dim a() As Integer
3: ReDim a(2, 2)
4: For i = 0 To 2
5: For j = 0 To 2
6: a(i, j) = i + j
7: Next
8: Next
9: For i = 0 To 2
10: For j = 0 To 2
11: Debug.Print a(i, j),
12: Next
13: Debug.Print
14: Next
15: End Sub
|
|
ReDimにより配列の次元を変更するVB 6のサンプル・プログラム19 |
これを実行すると以下のようになる。
しかし、VB.NETでは配列数は厳密に管理されており、次元数を変更するような操作は実行することができない。例えば、2次元配列をReDimステートメントで指定するには以下のように記述する必要がある。
1: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
2: Dim a(,) As Integer
3: ReDim a(2, 2)
4: Dim i, j As Integer
5: For i = 0 To 2
6: For j = 0 To 2
7: a(i, j) = i + j
8: Next
9: Next
10: For i = 0 To 2
11: For j = 0 To 2
12: Trace.Write(a(i, j) & ", ")
13: Next
14: Trace.WriteLine("")
15: Next
16: End Sub
|
|
あらかじめ配列の次元を明示する必要があるVB.NETのサンプル・プログラム20 |
これを実行すると以下のようになる。
0, 1, 2,
1, 2, 3,
2, 3, 4,
|
|
サンプル・プログラム20の実行結果 |
ここで注目すべきポイントは、2行目の括弧内に入った1個のカンマ“,”記号である。ここにカンマ記号が1個入ることにより、これが2次元配列であることが明示される。2個のカンマが入れば3次元配列になるし、カンマがなければ1次元配列になる。
なお余談だが、12行目のTrace.Writeは文字列を出力後に改行しない点でTrace.WriteLineと機能が異なるメソッドである。
配列を作成する別の方法
VB.NETには配列を作成するいくつかの方法がある。以下はそれを示すサンプル・ソースである。
1: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
2: Dim a(3) As Integer
3: a(1) = 123
4: Trace.WriteLine(a(1))
5: a = New Integer(3) {}
6: Trace.WriteLine(a(1))
7: a(1) = 456
8: Trace.WriteLine(a(1))
9: Dim b() As Integer = New Integer(3) {}
10: b(1) = 789
11: Trace.WriteLine(b(1))
12: End Sub
|
|
異なるいくつかの方法で配列を宣言しているVB.NETのサンプル・プログラム21 |
これを実行すると以下のようになる。
2行目はごく常識的な配列の宣言である。5行目のように配列そのものに新しい配列を代入すると、配列の中身をすべて入れ替えることができる。新しい配列は、“New Integer(3)”のように、Newキーワードとデータ型名で作成することもできる。この方法では、内容がすべて入れ替わるので、値が保存されることはなく、6行目のTrace.WriteLineでは初期化されたときの初期値である0が表示されることになる。Newを使った構文はDimステートメントとともに使用してもよく、9行目のように記述することも可能である。
まとめ
こうして見ると、VB 6とVB.NETの間の相違が多いことに驚く方も多いと思う。しかしそれでも、異なる点よりも、共通点の方がずっと多い。この程度の細かい違いは、使い込んでいればすぐになれてしまうだろう。
次回は関数や宣言に関する相違点を中心に解説したいと考えている。
では次回もまた会おう。
Insider.NET 記事ランキング
本日
月間