連載

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

Chapter 01 基本構文の変化

株式会社ピーデー 川俣 晶
2004/02/19
Page1 Page2 Page3 Page4

 本記事は、(株)技術評論社が発行する書籍『VB6プログラマーのための入門 Visual Basic .NET 独習講座』の一部分を許可を得て転載したものです。同書籍に関する詳しい情報については、本記事の最後に掲載しています。

 ここでは、主にプログラム言語としての基本文法にかかわる部分の変化を解説している。例えば、数値のリテラルを記述する構文の変化などは、ここに含まれる。

 型文字と新しいデータ型

 BASIC言語の初期の時代には、データ型を識別するために、特定の記号を使用している場合があった。例えば、文字列型はドル記号($)、整数型はパーセント記号(%)といったルールを決めて、変数の名前などの後ろに付けた。この名残りがいまでも残っていて、記号が使用できる。VB 6で次のようなプログラム・コードを記述しても問題なく動作する。

 1: Private Sub Form_Load()
 2:   Dim i As Integer
 3:   i% = 123
 4:   Debug.Print i
 5:   Dim l As Long
 6:   l& = 123&
 7:   Debug.Print l
 8:   Dim d As Currency
 9:   d@ = 123@
10:   Debug.Print d
11:   Dim s As Single
12:   s! = 123!
13:   Debug.Print s
14:   Dim du As Double
15:   du# = 123#
16:   Debug.Print du
17:   Dim st As String
18:   st$ = "123"
19:   Debug.Print st
20: End Sub
リスト1-1 「$」や「%」などの記号文字の付いた変数を使用したプログラム

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

1:  123
2:  123
3:  123
4:  123
5:  123
6:  123
リスト1-2 リスト1-1の実行結果

 この機能は、VB.NETにも継承されている。だが、VB.NETでは、新しいデータ型が増えている。これらのデータ型に対応する記号文字は存在するのだろうか?(データ型については、データ型の変化を参照)。リスト1-3は、それを踏まえて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:   i% = 123
 4:   Trace.WriteLine(i)
 5:   Dim l As Long
 6:   l& = 123&
 7:   Trace.WriteLine(l)
 8:   Dim d As Decimal
 9:   d@ = 123@
10:   Trace.WriteLine(d)
11:   Dim s As Single
12:   s! = 123.0!
13:   Trace.WriteLine(s)
14:   Dim du As Double
15:   du# = 123.0#
16:   Trace.WriteLine(du)
17:   Dim st As String
18:   st$ = "123"
19:   Trace.WriteLine(st)
20:   Dim b As Byte
21:   b = 123
22:   Trace.WriteLine(b)
23:   Dim sh As Short
24:   sh = 123
25:   Trace.WriteLine(sh)
26: End Sub
リスト1-3 リスト1-1をVB.NETで書き換えたプログラム

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

1: 123
2: 123
3: 123
4: 123
5: 123
6: 123
7: 123
8: 123
リスト1-4 リスト1-3の実行結果

 まず、VB 6のCurrency型がなくなり、VB.NETではDecimal型に取って代わったことに注目してみよう。VB 6でCurrency型に対応していた「@」記号は、VB.NETではDecimal型を表現するものに変化している。しかし、もともとVB 6に存在しなかったShort型には対応する記号文字はない。また、VB 6にもあったByte型についても対応する記号文字はない。

 記号を入力する代わりに、データ型名のフルスペルを書き込むのは面倒に思えるかもしれないが、記号文字を使うのはあくまで互換のために用意された機能であり、フルスペルでデータ型名を書く方がお勧めである。

 整数リテラルと浮動小数点リテラル

 プログラム・コード中で定数を記述する際、しばしば、定数のデータ型を明示する必要に迫られる場合がある。そのような場合、VB 6では、型文字と新しいデータ型で述べた記号文字を定数に付加するといった方法で、データ型を明示した。しかし、記号文字が用意されないデータ型も生まれてきたので、何か代わりの方法が必要になってきた。VB.NETでは新しい方法で定数のデータ型を明示することができる。リスト1-5はそれを使用したサンプル・プログラムである。

 1: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 2:   Dim a As Object
 3:   a = 123
 4:   Trace.WriteLine(a.GetType().FullName)
 5:   a = 123%
 6:   Trace.WriteLine(a.GetType().FullName)
 7:   a = 123&
 8:   Trace.WriteLine(a.GetType().FullName)
 9:   a = 123S
10:   Trace.WriteLine(a.GetType().FullName)
11:   a = 123I
12:   Trace.WriteLine(a.GetType().FullName)
13:   a = 123L
14:   Trace.WriteLine(a.GetType().FullName)
15:
16:   a = 1.23
17:   Trace.WriteLine(a.GetType().FullName)
18:   a = 1.23!
19:   Trace.WriteLine(a.GetType().FullName)
20:   a = 1.23#
21:   Trace.WriteLine(a.GetType().FullName)
22:   a = 1.23@
23:   Trace.WriteLine(a.GetType().FullName)
24:   a = 1.23F
25:   Trace.WriteLine(a.GetType().FullName)
26:   a = 1.23R
27:   Trace.WriteLine(a.GetType().FullName)
28:   a = 1.23D
29:   Trace.WriteLine(a.GetType().FullName)
30: End Sub
リスト1-5 定数のデータ型を明示したプログラム

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

 1: System.Int32
 2: System.Int32
 3: System.Int64
 4: System.Int16
 5: System.Int32
 6: System.Int64
 7: System.Double
 8: System.Single
 9: System.Double
10: System.Decimal
11: System.Single
12: System.Double
13: System.Decimal
リスト1-6 リスト1-5の実行結果

 なお、リスト1-5で使用しているGetTypeメソッドは、型情報を持つオブジェクトを参照する機能であり、FullNameプロパティは型のフルネームの文字列を返すものである(これらの機能を用いて表示されているSystemで始まるデータ型名のフルネームについては、プリミティブ型のエイリアスを参照)。

 リスト1-5の5、7、18、20、22行目は、従来どおりの記号を用いた記述方法を使ったものである。それに対して、9、11、13、24、26、28行目は、新しい記述方法である。数値のあとにアルファベット1文字を付加して、データ型を明示している。例えば5行目と11行目を見比べると分かるだろう。同じInteger型(表示結果はSystem.Int32)を示す数値を記述するために、古い「%」記号を付ける方法と、新しい「I」を付ける方法をそれぞれ使用している。VB.NETでは、後者の方法がお勧めである。実際、9行目のShort型に対応する記号文字はなく、記号文字で指定したくてもできないことになる。

 文字リテラル

 VB 6では、1文字だけのデータを表すデータ型はなく、1文字を扱う場合も文字列型を使っていた。しかし、VB.NETでは、1文字を表すChar型(フルネームは、System.Char。Systemで始まるデータ型名については、プリミティブ型のエイリアスを参照)が導入されたことで事情が変わった。異なるプログラム言語間での相互運用性を維持したり、汎用クラス・ライブラリを利用したりするために、1文字の「文字列」ではなく、1文字の「文字」を表現する手段が必要になるケースが生じるようになった。

 1文字の「文字列」と1文字の「文字」が区別されて扱われていることを、以下のサンプル・プログラムで確認してみよう(リスト1-7)。

 1: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 2:   Dim c1, c2 As Char
 3:   Dim o1, o2 As Object
 4:   c1 = "A"
 5:   c2 = "A"c
 6:   o1 = "A"
 7:   o2 = "A"c
 8:   Trace.WriteLine(c1.GetType().FullName)
 9:   Trace.WriteLine(c2.GetType().FullName)
10:   Trace.WriteLine(o1.GetType().FullName)
11:   Trace.WriteLine(o2.GetType().FullName)
12: End Sub
リスト1-7 1文字のデータに対してChar型と文字列型を使い分けたプログラム

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

1: System.Char
2: System.Char
3: System.String
4: System.Char
リスト1-8 リスト1-7の実行結果

 5行目や7行目のように、ダブルクォート(")でくくった1文字の後ろに文字“c”を書けば、それは文字リテラルと見なされる。しかし、4行目や6行目のように文字“c”を書かない場合は、1文字の「文字列」と見なされる。結果の3行目と4行目を見れば、明らかだろう。

 なお、文字列は2文字以上の長い文字列を書くことができるが、文字は当然1文字しか書くことができない。"AB"は正しいが、"AB"cは正しくない。また、ここでいう1文字は、Unicodeで扱われる単位を意味し、例えば複数の文字を合成して1文字とする合成文字を記述する場合、必ずしも人間が1文字として認識する単位と一致しない場合がある(Unicodeについての詳細は.NET Frameworkクラス・ライブラリを用いたテキストファイルの入出力で紹介している書籍『Unicode標準入門』を参照)。


 INDEX
  [連載] 改訂版 プロフェッショナルVB.NETプログラミング
  Chapter 01 基本構文の変化
  1.型文字と新しいデータ型/整数リテラルと浮動小数点リテラル/文字リテラル
    2.日付リテラルについての注意点/変数の宣言をカンマ区切りで続けた場合の相違/変数のスコープ
    3.引数の値渡し(ByVal)と参照渡し(ByRef)のデフォルト/プロパティの参照渡し/可変長引数の参照と値
    4.省略可能な引数/Nothingの振る舞いの変更/行番号使用時のコロン(:)記号
 
「改訂版 プロフェッショナル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メールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH