連載
プロフェッショナルVB.NETプログラミング
第1回 さらなる進化を遂げたVisual Basic
(株)ピーデー
川俣 晶
2002/03/16
|
|
.NET Frameworkより得るもの
.NET Frameworkは、Visual Basic以外の多くの言語も扱うことを前提としている。そのため、従来のVisual Basicには存在しない機能も多数含んでいる。しかし、それらの機能は特定言語専用という構造ではないため、VB.NETから利用することもできる。つまり、.NET Frameworkという環境の上にVisual Basicが引っ越した結果、さまざまな新しい機能がVB.NETからも手の届く範囲にやってきたというわけである。例えば、「On Error GoTo文」よりも強力なエラー処理を実現する「例外(exception)」という機能がVB.NETでは利用できる。例外はもともとC++やJavaなどで使われてきた機能だが、.NET Frameworkでは標準的にエラー処理を行う方法として取り入れられている。そこで、当然の成り行きとしてVB.NETでも例外がサポートされているわけである。
もう1つ、VB.NETで利用可能になるのは、.NET Framework標準の膨大なクラス・ライブラリである。このクラス・ライブラリには、さまざまな機能を持った便利なクラスが用意されており、これらを自由に呼び出して利用できる。その中には、過去のVisual Basicが標準で持つ機能と重複するものもある。例えばVB 6では、ファイルを開いて読み出すといった機能が言語に組み込まれていたが、.NET Frameworkのクラス・ライブラリにもファイルを開いて読み出す機能が用意されている。しかし、両者の持つ機能は同等というわけではなく、クラス・ライブラリの方がより現在のニーズにマッチした高度な機能を備えている。例えばこのファイルを開く機能でいえば、クラス・ライブラリでは開くファイルの文字コード・エンコーディングを指定する機能があり、シフトJIS以外で記述されたテキスト・ファイルも容易に扱うことができる。
もう1点、大きな特徴がある。.NET Frameworkの世界では、クラスやメソッドはプログラム言語と関係なく処理される。そのため、VB.NETから、他言語で書かれたクラスやメソッドを呼び出すことは極めて容易である。何もしなくてもただ呼び出せばよい。逆も真で、VB.NETで記述したクラスやメソッドは他言語から容易に呼び出すことができる。VB 6でも、COMオブジェクトの形にすれば、言語を超えた呼び出しが可能になるが、VB.NETではその手間すら必要ない。これにより、言語の枠を超えたコードの融通がいままで以上に進むのではないかと思われる。例えば、社内のほかの部署で書かれた他言語のソースを取り込んで使うのも簡単になる。また、市販のライブラリ類にしても、いままではVisual Basic用、C++用……と分かれていたが、.NET Framework上で動作するものは.NET Framework用という1種類しか存在しないことになる。そのため、利用可能なライブラリのバリエーションが増えるかもしれない。
それでは具体的なソース・コードを見ながら、新しい機能を使うことのメリットを見てみよう。サンプルとしては、テキスト・ファイルの読み出しを取り上げてみよう。Unicode(UTF-16)で記述されたテキスト・ファイルがあり、それを読み出すプログラムをVB 6とVB.NETの双方で書いてみよう(なお、Unicodeについては、改めて概要を説明する予定である)。まずはVB 6から。
1: Private Sub Form_Load()
2: Const ForReading = 1
3: Const TristateTrue = -1
4: Dim fs, f
5: Set fs = CreateObject("Scripting.FileSystemObject")
6: Set f = fs.OpenTextFile("c:\testfile.txt", ForReading, False, TristateTrue)
7: Do While f.AtEndOfStream <> True
8: s = f.ReadLine
9: Debug.Print s
10: Loop
11: f.Close
12: End Sub |
|
VB 6で記述したテキスト・ファイルを読み込み表示するサンプル・プログラム5 |
VB 6において、ファイルを開くための最も基本的な機能は、Openステートメントであるが、日本語環境で普通に使えばシフトJISファイルを読み込むことになり、Unicodeファイルを読み出すことはできない。そこで、FileSystemオブジェクトを使用している。OpenTextFileメソッドの第4引数をTristateTrueに設定すれば、Unicodeテキスト・ファイルを正しく読み出してくれる。
次にVB.NETより、生の.NET Frameworkのクラス・ライブラリを呼び出して記述した例を示す。
1: Imports System.IO
2:
3: Public Class Form1
4: Inherits System.Windows.Forms.Form
5:
6: #Region " Windows Form Designer generated code "
7:
8: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
9: Dim reader As StreamReader
10: reader = New StreamReader( _
11: New FileStream("c:\testfile.txt", FileMode.Open, FileAccess.Read), _
12: System.Text.Encoding.GetEncoding("UTF-16"))
13: Do
14: Dim s As String
15: s = reader.ReadLine()
16: If s = Nothing Then Exit Do
17: Debug.WriteLine(s)
18: Loop
19: reader.Close()
20: End Sub
21: End Class |
|
VB.NETで記述したテキスト・ファイルを読み込み表示するサンプル・プログラム6 |
なお、6行目の部分は、統合環境が自動生成したコードが隠されていることを示す。さて、2つを見比べれば、まったく異質のソースであることが分かるだろう。クラス・ライブラリはVisual Basicプログラマーに分かりやすいことを意図して設計されているわけではないのである。今回のところはソースを理解できなくても構わない。これを理解する方法は、これからの連載で随時解説していく。
とはいえ、1カ所だけ理解していただきたいところがある。それは12行目の“UTF-16”という指定である。これが、読み出すファイルがシフトJISではなく、Unicode(UTF-16)で記述されたテキスト・ファイルであることを示している。VB 6の例では、Unicodeかどうかをフラグ値で設定していたが、クラス・ライブラリでは名前で与えることができる。つまり、シフトJISとUnicodeだけでなく、ほかの多くの種類の文字エンコーディングで記述されたファイルを、容易に指定して読み書きできることを示している。UNIXサーバから転送されてきたファイルはEUC-JPで記述されているので、そのままでは読み込めない、といった問題を解決するのは極めて容易になる。
Insider.NET 記事ランキング
本日
月間