連載

プロフェッショナルVB.NETプログラミング

第2回 データ型の処理

(株)ピーデー
川俣 晶
2002/04/11

Page1 Page2 Page3 Page4 Page5 Page6

配列の次元数の変更

 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

 これを実行すると以下のようになる。

0             1             2
1             2             3
2             3             4
サンプル・プログラム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

 これを実行すると以下のようになる。

123
0
456
789
サンプル・プログラム21の実行結果

 2行目はごく常識的な配列の宣言である。5行目のように配列そのものに新しい配列を代入すると、配列の中身をすべて入れ替えることができる新しい配列は、“New Integer(3)”のように、Newキーワードとデータ型名で作成することもできる。この方法では、内容がすべて入れ替わるので、値が保存されることはなく、6行目のTrace.WriteLineでは初期化されたときの初期値である0が表示されることになる。Newを使った構文はDimステートメントとともに使用してもよく、9行目のように記述することも可能である。

まとめ

 こうして見ると、VB 6とVB.NETの間の相違が多いことに驚く方も多いと思う。しかしそれでも、異なる点よりも、共通点の方がずっと多い。この程度の細かい違いは、使い込んでいればすぐになれてしまうだろう。

 次回は関数や宣言に関する相違点を中心に解説したいと考えている。

 では次回もまた会おう。End of Article


 INDEX
  連載 プロフェッショナルVB.NETプログラミング
  第2回 データ型の処理
    1.まずは小さなプログラムから
    2.整数型の表現力
    3.そのほかのデータ型の互換性
    4.同じデータ型の変数の宣言
    5.配列のサイズ変更
  6.配列の次元数の変更
 
「プロフェッショナルVB.NETプログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間