Visual Basic 中学校 |
Visual Basic 9.0は次期バージョンのVBのことです。コード名は「Orcas」です。発売は2008年下半期以降になると思いますが、ここでは先取りしてVB9から新しく導入される予定の 言語機能をダイジェストで紹介します。
概要 ・ VB9を含むVisual Studio Orcas Beta1の英語版は以下のサイトからダウンロードできる。
・上記のインストールは注意事項をよく読んでから行う必要がある。 ・新しく導入されたLINQという構文を使用するとコレクションやデータベースなどを統一的に操作してデータを扱うことができる。 ・VB9ではXMLをインラインで記述できるようになった。 ・VB9では変数の初期化時に型が自動的に同定されるので明示的に型を指定する必要がかなり減った。この機能は「型の推定」と呼ばれる。 ・VB9ではちょっとだけ使用するための構造体を即席で作成する「匿名型」という機能が追加された。 ・.NET Framework 3.5には2.0と比べるとかなり大量の名前空間・クラスが追加されている。 ・他にもいろいろな改良がたくさんある。VB.NET2003からVB2005へのバージョンアップ以上のインパクトは必至。 |
VB9はVB2005の後継バージョンの仮の名前です。まだ開発途中で、実際に販売されるのは1年以上は先になるのではないかと想像していますが、このほと、この開発途中のバージョンがマイクロソフトから公開されダウンロードできるようになりました。
公開されているのは残念ながら英語版ですが興味のある方はぜひ実際に入手して試してみてください。
http://msdn2.microsoft.com/ja-jp/vstudio/aa700831(en-us).aspx
実際にはVB9だけではなく、次期Visual Studio全体がダウンロードできます。コード名は「Orcas」です。
この開発途中のものは製品版と区別するためにBeta1(ベータ1)と呼ばれています。ですから、正式に言うとダウンロードできるのはVisual Studio Orcas Beta1です。
たいていの場合、製品の発売が近づいてくると正式な製品名がつけられるので、たぶん発売時には「Visual Studio 2008」のよう名前になることでしょう。ただし、過去にはWindows Millenniumのようにコード名がそのまま製品名になったこともありました。
今回は、私はこのベータ1を使用して新しい機能をいろいろ試してみました。この記事では新しい言語仕様をダイジェストでみなさんに紹介します。
なお、冒頭にもありますように今回紹介する内容は開発途中のものを基にしていますので、実際に製品が発売されるときには変更になっている可能性もあります。あらかじめご了承ください。
開発途中の製品は十分な検証やテストがされていないため、重要な環境にはインストールしないようにしてください。たとえば、VB9をインストールしたら他のソフトがおかしくなるというようなこともないとは言えません。また、VB2005がインストールされている環境へVB9をインストールする場合の注意点等が英語で公開されているので、できれば参考にしてください。 一番よいのはどうでもいい環境にインストールすることです。これなら環境がまるごと壊れても何の問題もないので安心してVB9が試せます。「どうでもいい環境」を構築するのに最適なツールはVirtual PC2007です。このソフトはマイクロソフトのサイトから無料でダウンロードできます。 なお、VB9はインストールに失敗することも考えられます。試してみるのは結構ですが、すべて自己責任で結果の保証すらありません。初心者の方が試してみる場合は覚悟してください。でも、こういうのでいろいろ苦労することが結構勉強になったりするものです。 |
VB9の新機能としてもっとも目を引くのがLINQです。LINQはコレクションやデータベースのようなデータの集合を操作して、結果を取り出すための新しい構文です。はじめて目にする方はその奇異な様に驚かれるかもしれません。
以下はLINQを活用する初歩的な例です。
Dim Ar
As New List(Of String) Ar.Add("カンビュセス") Ar.Add("ペピ") Ar.Add("イシュトヴァーン") Ar.Add("キュロス") '名前が3文字より多い名前のみを抽出して、辞書順に並び替えるクエリを生成 Dim Linq = From Name As String In Ar Where Len(Name) > 3 Order By Name 'クエリを実行して結果をListBoxに表示 ListBox1.Items.AddRange(Linq.ToArray) |
コメントにもありますが、この例では人物名のコレクションから名前が3文字より多い者だけを抽出して辞書順に並び替えて表示します。
VB2005以前ではこのような処理はループを使用する必要がありましたが、LINQの登場によってたった1行で抽出条件の指定ができるようになりました。Dim Linq = の行の=の右側がLINQです。
ぱっと見でわかるように従来のVBの構文とは似ても似つきません。SQLの方に近い印象です。
もう1つ、面白い例を紹介しましょう。
次の例では、システムフォルダの中からサイズが1KB以上のもので2007年以降に更新したファイルの一覧で表示します。
'システムフォルダにあるファイルの一覧を取得 Dim Files = New IO.DirectoryInfo(Environment.SystemDirectory).GetFiles() 'サイズが1KB以上で、2007年以降に更新したファイルの名前を取得するクエリを生成 Dim Linq = From File In Files Where File.Length > 1024 AndAlso File.LastWriteTime > #1/1/2007# Select File.Name 'クエリを実行して結果をListBoxに表示 ListBox1.Items.AddRange(Linq.ToArray) |
まだまだ応用が利きそうですね。アイディアもいろいろでてきそうで楽しみです。
なお、お遊びですが上のプログラムは次のようにたった1行で書くことも可能です。
ListBox1.Items.AddRange((From File In New IO.DirectoryInfo(Environment.SystemDirectory).GetFiles() Where File.Length > 1024 AndAlso File.LastWriteTime > #1/1/2007# Select File.Name).ToArray) |
このLINQはコレクション以外でもさまざまなデータソースに対して統一的なアクセスができるようにすることを目的としています。ここで紹介した以外にも便利な機能がいろいろと盛り込まれています。
XMLはXMLParserを使用することでかなり前のバージョンのVBから扱うことができましたが、VB9からはXMLをVBのプログラムの中に直接組み込むことができるようになりました。
以下のプログラムは有効なプログラムです。
Dim Doc =
<PERSONS> <PERIOD NAME="平安"> <PERSON CLASS="天皇">桓武天皇</PERSON> <PERSON CLASS="貴族">藤原頼長</PERSON> <PERSON CLASS="武士">源頼義</PERSON> </PERIOD> <PERIOD NAME="江戸"> <PERSON CLASS="将軍">徳川慶喜</PERSON> <PERSON CLASS="天皇">孝明天皇</PERSON> </PERIOD> </PERSONS> Dim Reader As Xml.XmlReader = Doc.CreateReader |
この構文がどのように使用されるのかは注目に値するが、おそらくは簡易的な構造体やデータソースとして利用されるものでしょう。
なお、この例ではDocは後述する型の推定機能によってXElement型になり、このクラスの機能を活用してXMLにアクセスすることもできます。
変数を宣言するときに型を指定しなくても自動的に型を推定してくれる機能が追加されました。
これは変数を初期化する値の型をそのまま変数の型にしてしまうと言う機能で、「推定」というよりも「同定」という感じです。
たとえば、以下の変数ValueはInteger型になります。
Dim Value = 100 |
以下の変数ValueはDecimal型になります。
Dim Value = CDec(100) |
このくらいなら、「As以降を省略できて楽ですね」というレベルなのですが、この機能が効力を発揮するのは何と言っても先程のLINQと連携するときなど、複雑な型を生成するときです。
この機能がなければLINQを使用するときの型を調べるのが少し面倒になるところでした。全体的に今回のバージョンでは疑似的なものも含めて動的なプログラミング言語という方向性が示されているようです。
なお、この推定機能は厳密なプログラミングのためにはかえって邪魔で無用であると言う考え方も当然存在します。そのため、新しいオプションOption Inferが導入されています。ファイルの先頭でOption Infer Offを記述するとそのファイルでは型の推定機能は無効になります。ご安心ください。
私はよくあるのですが、2つの文字列型のプロパティ(またはフィールド)をもった小さな構造体をちょっとだけ使用したいと感じたことはありませんか?
従来のバージョンのVBではこのような要求でもしっかりと構造体を宣言する必要がありましたが、VB9では匿名型という機能によってその場でちょっとだけ使う構造体が簡単に定義できるようになりました。
次の例では、KeyプロパティとValueプロパティを持つ名前のない構造体を変数Valueに割り当てています。
Dim MyEntry =
New With {.Key = "", .Value = ""} MyEntry.Key = "C001" MyEntry.Value = TextBox1.Text |
この例は次のように1行で書くこともできます。
Dim MyEntry = New With {.Key = "C001", .Value = TextBox1.Text} |
とはいえ、VB2005以降ではKeyとValueのペアであればDictionaryEntryクラスを使用できるのでこの新しい機能に頼る必要はありません。
しかし匿名型はいくつでもプロパティを定義できますのでDictionaryEntryクラスより応用が広がります。
なお、上述の例ではKeyプロパティとValueプロパティは文字列型になります。これは型の推定機能が働くからです。Option Infer Offを指定している場合にはKeyプロパティもValueプロパティもObject型になります。
VB9ではクラスのインスタンスを作成するときにプロパティに値をセットできるようになりました。
従来はコンストラクタで指定可能だった項目のほかはインスタンス作成後に別途値をセットする必要があったので、手間が軽減され、より簡潔な書き方ができるようになります。
Dim MyButton =
New Button With
{.Text = "新しいボタン", .BackColor = Color.Blue, .Location =
New Point(100, 20)} Me.Controls.Add(MyButton) |
ところで、ちょっと見てみるとわかるのですが、実はこの構文は匿名型を作成するときに構文とほとんど同じです。違うのは型の名前を指定するかしないかだけです。
なお、この例でも型の推定機能が働くのでMyButtonはButton型になります。
クラスライブラリのバージョンもアップし、クラスやメンバが追加されます。
念のために、VBと.NET Frameworkのバージョンの対応を表にまとめておくと次のようになります。
VB | .NET Framework |
VB6以前 | (なし) |
VB.NET(2002) | .NET Framework 1.0 |
VB.NET 2003 | .NET Framework 1.1 |
VB2005 | .NET Framework 2.0 |
- | .NET Framework 3.0 |
VB9 | .NET Framework 3.5 |
VB2005を普通に使用されている方は.NET Framework 2.0を使っていることになります。.NET Framework 3.0も既にリリースされていて利用は可能なのですが現在のところ主流ではないようです。
VB9ではさらに新しい.NET Framework 3.5を標準で使用します。.NET Framework 2.0と比べるとかなり大量の名前空間・クラスが追加されています。.NET Frameworkのクラスライブラリを見ていくとかなり大変なので今回は割愛しますが、興味のある方はドキュメントなどを入手してどのような名前空間・クラスが追加されているのか調べてみるのもいいと思います。
VB9は.NET Framework 2.0以降に対応しており、プロジェクトを作成するときに対象のバージョンを選ぶことができるようになっています。
今回はVB9の新しい言語仕様をダイジェストで紹介しましたが、変更されているのは言語仕様だけではありません。言語仕様の変更以上にエキサイティングな変更も多数含まれています。たとえば、新しいプロジェクトの種類としてWPFやWCFなど多くのテンプレートが追加されています。
IDEもより使いやすくなるようにいろいろと改良されるようです。
プロの技術者の方は情報収集を怠っていると時代遅れになってしまうかもしれませんよ。今から発売が楽しみです。
現在ベータ1がリリースされたばかりですので、過去の事例と照らし合わせると数カ月後にベータ2がでて、そこからさらに数か月で製品版完成・一般発売ということになるでしょう。となると、製品の販売開始は2008年下半期くらいでしょうか。これは私の勝手な予測であり、マイクロソフトから情報の提供を受けているわけではありませんが…。
ベータ1もまだ入手してから1週間経っていないのでじっくり見てはいないのですが、現在のところVB2005をベースにして構築してあるようで、かなり安定して動作も軽いです。新しい機能もすいすいと試せてご機嫌です。