連載
プロフェッショナルVB.NETプログラミング
第2回 データ型の処理
(株)ピーデー 川俣 晶
2002/04/11 |
|
同じデータ型の変数の宣言
Dimステートメントで変数を宣言する際に、データ型を明示しない変数と明示する変数を同時に宣言すると、VB 6とVB.NETでは結果が異なる場合がある。以下にその例をご紹介する。まずはVB 6で記述して正常に動作するサンプル・ソースを示す。
1: Private Sub Form_Load()
2: Dim a, b As Integer
3: a = 32768
4: b = 1
5: Debug.Print a + b
6: End Sub
|
|
データ型を明示しない変数と明示する変数を同時に宣言しているVB 6のサンプル・プログラム11 |
これを実行すると以下の結果を表示する。
このソースでは、aはVariant型、bはInteger型になり、Integer型には入らない大きな数32768をVariant型に代入することは何の問題もない。
さて、次は同じソースをVB.NETで記述した場合である。
1: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
2: Dim a, b As Short
3: a = 32768
4: b = 1
5: Trace.WriteLine(a + b)
6: End Sub
|
|
サンプル・プログラム11と同じ内容をVB.NETで記述したサンプル・プログラム12 |
このソースでは数値範囲を一致させるためにIntegerをShortに置き換えている。これをビルドすると以下のようなコンパイル・エラーになる。
Q:\aWrite\@it\VB.NET\002\smpl\sample006n\Form1.vb(47) : error BC30439: 定数式は、型 'Short' では表現できません。 |
|
サンプル・プログラム12をビルドしたときのコンパイル・エラー |
エラーが起きたのは47行目と表示されているが、上記抜粋では3行目に当たる。3行目に記述された変数aはShort型であるため、32768を入れるには小さすぎるということがコンパイラにより指摘されたのである。2行目の変数宣言は、VB 6ではaの指定が省略されたと見なされVariant型になるが、VB.NETではa、bの両方がShort型と見なされ、aのデータ型指定が省略されたとは見なされない。その結果、2つのソースは同じ意味を持つものとして扱われないことになる。
このようなトラブルを回避するには、できるだけ変数のデータ型を明示的に付けるように習慣付ければよいだろう。
配列添え字の下限
コンピュータの世界では、数を数えるときに1ではなく、0からカウントすることが多い。しかし、これは一般常識としてはなじみにくい。VB 6には、配列の添え字を0から使うか1から使うかを指定するOption Baseという機能があった。以下はそれを用いて、1から数えるようにしたサンプル・ソースである。
1: Option Base 1
2: Private Sub Form_Load()
3: Dim a(10) As Integer
4: For i = 1 To 10
5: a(i) = i * 2
6: Next
7: For i = 1 To 10
8: Debug.Print a(i)
9: Next
10: End Sub
|
|
配列の添え字の始まりを1に指定したVB 6のサンプル・プログラム13 |
これを実行すると以下のようになる。
2
4
6
8
10
12
14
16
18
20
|
|
サンプル・プログラム13の実行結果 |
VB.NETには、Option Baseが存在しないため、配列の下限を1に設定することができない。そのため、以下のように下限が0であることを前提とするコードに書き換えねばならない。
1: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
2: Dim a(9) As Integer, i As Integer
3: For i = 0 To 9
4: a(i) = (i + 1) * 2
5: Next
6: For i = 0 To 9
7: Trace.WriteLine(a(i))
8: Next
9: End Sub
|
|
サンプル・プログラム13をVB.NETで書き換えたサンプル・プログラム14 |
これを実行すると以下のようになる。
2
4
6
8
10
12
14
16
18
20
|
|
サンプル・プログラム14の実行結果 |
これについては、楽な解決方法が何もない。地道にソースの書き方を変えていくしか対処方法がないだろう。
Insider.NET 記事ランキング
本日
月間