連載

プロフェッショナルVB.NETプログラミング
―― VB 6プログラマーのためのVB.NET入門 ――

第30回 残されたいくつかのトピック(その1)

(株)ピーデー
川俣 晶
2002/12/21

Page1 Page2 Page3

型文字と新しいデータ型

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

  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
「$」や「%」などの記号文字の付いた変数を使用したVB 6のサンプル・プログラム1

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

 1:  123
 2:  123
 3:  123
 4:  123
 5:  123
 6:  123
サンプル・プログラム1の実行結果

 この機能は、VB.NET(Visual Basic .NET)にも継承されている。だが、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:   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をVB.NETTで書き換えたサンプル・プログラム2

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

 1: 123
 2: 123
 3: 123
 4: 123
 5: 123
 6: 123
 7: 123
 8: 123
サンプル・プログラム2の実行結果

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

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

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

 プログラム・コード中で定数を記述する際、しばしば、定数のデータ型を明示する必要に迫られる場合がある。そのような場合、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 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
定数のデータ型を明示したVB.NETのサンプル・プログラム3

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

  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
サンプル・プログラム3の実行結果

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


 INDEX
  連載 プロフェッショナルVB.NETプログラミング
  第30回 残されたいくつかのトピック(その1)
  1.型文字と新しいデータ型/整数リテラルと浮動小数点リテラル
    2.文字リテラル/Nothingの振る舞いの変更/条件付きコンパイル
    3.条件付き定数/領域ディレクティブ
 
「プロフェッショナル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 記事ランキング

本日 月間