VB9でInteger?

.NET Framework 2.0からnullableが使えるようになった。これを使うとintにnullを入れたりできる。

C#では、元々の型の名前のうしろに"?"を付けると、nullableになる。

int? a = 1;
a = null;

こんな感じ。aにnullが入るというのがnullable。

これと同じ事をVB8(Visual Studio 2005)でやるには、Nullable(Of T)と書く。

Dim a As Nullable(Of Integer) = 1
a = Nothing

こんな感じ。nullableは本当はGenericsなので、VB8では素直にそのままGenericsとして書く。もちろんC#でも Nullable みたいに書くこともできて、int? はそのシンタックスシュガーだ。

VB9ではInteger?と書ける

で、本題なんだけど、VB9(Visual Studio 2008)では、Integer? と書けるようになった。

Dim a As Integer? = 1
a = Nothing

すっきりした。

元々、Nullableと言ってるのに実際にはNothingを入れるというのは、VBという言語の世界で用語が統一されてない(Nothingableじゃないの?という)感じがして気持ち悪かったけど、Integer?と書けるならば、この件も気にならない。

.NET Framework 2.0で動かしてもOK

どうやらVisual Studio 2008に付いてくるコンパイラがこの記法をサポートしただけなので、ターゲットフレームワーク.NET Framework 2.0にしても大丈夫。別に3.0や3.5で動かすときしか使えない文法というわけではないっぽい。

これはいいねー。.NET 2.0向けの開発だとしてもVisual Studioは2008を使っていきたい。

VBで記号に意味を持たせるのは珍しい

VBは、よほどのことが無いと記号を文法に組み込まない、と思っていた。

Cの ! もVBでは Not だし、配列の添え字もハッシュテーブルのキーも関数の引数もカッコは () しか出てこない。{} はそもそも無い (配列を生成するときに出てくるけど)。Cの = と == も両方 = だし、キャストするにはいちいちCTypeと書く。GenericsだってKlass(Of T)と書く。記号がホント少ない。パッと見た感じは魔法のようなプログラムではないので優しく見えるかも知れないけど、その代わり、同じ記号でも文脈によっていろんな意味を持っていたり、記号ではなく英単語で記述する場面が多かったり、意外と面倒だなあとも思っていた。

そんなVBで、Nullableに関して一度は Nullable(Of T) と書くようにしておきながら、VB9で T? をサポートしたというのは結構自分の中で衝撃だった。

あと、匿名型で {} が出てきたのもあって、VB9は結構書きやすさを重視してるっぽい。