連載
プロフェッショナルVB.NETプログラミング
第2回 データ型の処理
(株)ピーデー
川俣 晶
2002/04/11
|
|
配列のサイズ変更
VB 6には、配列の大きさを変更するReDimステートメントが存在する。しかし、このステートメントは、あらかじめサイズの決まっていない配列を宣言してから、そのサイズを変更するという手順を踏まねば使用できない。以下は、配列のサイズを変えながら値を格納するサンプル・ソースである。
1: Private Sub Form_Load()
2: Dim a() As Integer
3: ReDim a(1)
4: a(0) = 0
5: a(1) = 1
6: ReDim Preserve a(2)
7: a(2) = 2
8: For i = 0 To 2
9: Debug.Print a(i)
10: Next
11: End Sub
|
|
ReDimステートメントを使用したVB 6のサンプル・プログラム15 |
これを実行すると以下のようになる。
ここではReDimを使用する準備として、2行目でサイズのない配列を用意している。このサイズのない配列aに対して、3行目や、6行目ではReDimを適用している。だが、VB.NETではこのあたりの挙動がやや異なる。以下は同じ機能を持つコードをVB.NETで記述してみた例である。
1: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
2: Dim i As Integer
3: Dim a(1)
4: a(0) = 0
5: a(1) = 1
6: ReDim Preserve a(2)
7: a(2) = 2
8: For i = 0 To 2
9: Trace.WriteLine(a(i))
10: Next
11: End Sub
|
|
サンプル・プログラム15をVB.NETで書き換えたサンプル・プログラム16 |
これを実行すると以下のようになる。
ここで注目すべきは3行目と6行目である。サイズのある配列に対してReDimステートメントを適用しているが、VB 6と異なり、VB.NETではこのコードは正常に機能する。VB.NETでは、すべての配列が、サイズ変更可能扱いとなっている。これは、.NET Frameworkで扱われる配列の仕様と一致させるための仕様変更と思われる。
配列の初期化
配列を作成した時点で、特定のデータを配列内に設定したい場合がある。VB 6には、そのための構文は特に用意されておらず、普通の配列への代入手順で内容をセットする。例えば、以下のサンプル・ソースのように記述する。
1: Private Sub Form_Load()
2: Dim a(2) As String
3: a(0) = "One"
4: a(1) = "Two"
5: a(2) = "Three"
6: For i = 0 To 2
7: Debug.Print a(i)
8: Next
9: End Sub
|
|
配列に初期値を設定するVB 6のサンプル・プログラム17 |
これを実行すると以下のようになる。
VB.NETには、配列の初期化構文が用意されているので、これを用いることで、より簡潔にあらかじめ指定された値を持った配列を作成できる。以下は、上記のVB 6サンプルと同じ機能をVB.NETで記述したサンプル・ソースである。
1: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
2: Dim a() As String = {"One", "Two", "Three"}
3: Dim i As Integer
4: For i = 0 To 2
5: Trace.WriteLine(a(i))
6: Next
7: End Sub
|
|
配列の初期化構文を使用したVB.NETのサンプル・プログラム18 |
これを実行すると以下のようになる。
ここでポイントになるのは、2行目の配列の宣言である。まず、配列のサイズを数値で指定せず空のままにしておく。配列のサイズは初期化する項目の数から明確に決まるので、数値で指定する必要はない。そして、配列の宣言に続いてイコール記号を置き、中括弧内にカンマで区切って値を並べる。ここでは、3つの文字列を記述しているが、これにより、配列の要素数は3個であると確定する。この宣言により、One、Two、Threeという3つの文字列を含む要素数3の配列が作成される。
Insider.NET 記事ランキング
本日
月間