VB10 の配列初期化子と型推論

投稿者: Tomotoshi Sugishita 2008年10月30日 3:00
blank_page

海の向こうでは、PDC2008 が開催中で、いろいろな話題が連日飛び込んできます。

Visual Studio 2010 のプレビュー版 (CTP) も公開され、次期 VB の言語仕様の変更点もいくつか見えてきたので、ご紹介したいと思います。

まずは、VS2008 で個人的に気になっていた、配列、コレクションの初期化子と型推論について確認してみました。

VB9(2008) では、以下のような式を記述すると、コンパイラにより v1 は Integer 型として型推論されます。

 

Dim v1 = 1

次に配列の場合ですが、VB8(2005) 以前のバージョンでは特定の型の配列の初期化を行う場合、

 

Dim v1() As Integer = New Integer() {1, 2, 3, 4, 5}

 

と記述していました。
このコードを VB9(2008) の型推論を期待し、

Dim v1() = {1, 2, 3, 4, 5}

このように記述した場合の v1 は Object 型の配列として扱われてしまいます。
どうやら VB9(2008) では、リテラル値や変数からの型推論はできても、配列の型推論はできないらしく、これは、

Dim v1() = New Integer() {1, 2, 3, 4, 5}

または

Dim v1 = New Integer() {1, 2, 3, 4, 5}

と記述する必要があります。
後者の方を見ると、配列の型推論もできているように思えるのですが、これは v1 に対し明示的に Integer 型の配列を代入しているので、単純な型の代入時と同じ解釈だと思います。
とりあえずはこの例のように型が決まった配列を扱う場合は、この仕様でも十分なのですが、匿名型の配列を初期化する場合にはこれが弊害となります。
匿名型の場合、当然型名を持たないのであえて書くならば、

Dim persons = New () { _
              New With {.ID = 1, .Name = "Person1"}, _
              New With {.ID = 2, .Name = "Person2"} _
             }

みたいな感じになるのでしょうか。
VB の場合、C 系言語のように配列とメソッドで使用する括弧が区別されていないので、コードパーサー上も複雑でしょうし、実際のコードを見る側としても何のこっちゃという感じですので、私の意見としては以下のような記述ができる方がより自然な形ではないのかなと思っていました。

Dim persons = { _
              New With {.ID = 1, .Name = "Person1"}, _
              New With {.ID = 2, .Name = "Person2"} _
             }

さてそこで VB10(2010) ですが、今のところは、私が期待していた仕様となっているようです。

Dim v1 = {1, 2, 3, 4, 5}

これと等価の C# のコードが

var v1 = new [] {1, 2, 3, 4, 5};

となるので、この部分の型推論については VB の方が一歩踏み込んだようなかたちになりますが、BASIC 言語の特性上せざるをえなかったということでしょうか。

ちなみに、配列の要素を複数の型でミックスした場合のルールが現行は C# と若干違うのですが、このあたりはまだ CTP なので、今後は統一していくのかもしれません。 (まぁ、普通こんなことはしないのでどうでもいいんだけど・・・。)

Dim v1 = {1I, 2L, 3D, 4.0F, 5.0R}   '(有効)Double 型の配列として解釈される

var v1 = {1, 2L, 3m, 4.0f, 5.0d}; //(無効)十進型と浮動小数点型は混在できない

最後に、さきほどの匿名型の配列の初期化コードですが、VB10(2010) では正式には以下のように

Dim persons = {
              New With {.ID = 1, .Name = "Person1"},
              New With {.ID = 2, .Name = "Person2"}
             }

なんと!VBからついに "_"(アンダースコア)が消えています!!
VB にはステップの終端文字(セミコロン)がないので、これ(コードのパース)の開発には VBTeam は相当苦労したんじゃないかなと。
限定条件があるとはいえ、これはかなりうれしいです。コードがかなり美しく見えます。つか、なにかとコードが書きやすいぞ!

それでは、今日はこんなところで。
こんなことを調べていたら、また夜中になってしまいました・・・。

また気づいたことがあったら書きます。

タグ: ,

Visual Basic | Visual Studio

コメントを書く




biuquote
  • コメント
  • プレビュー
Loading



杉下 朋年

Tomotoshi Sugishita
Tomotoshi Sugishita
< D&UNITE Co., Ltd. >

Microsoft MVP
Microsoft MVP for Development Platforms
- ASP/ASP.NET Jul.2009 - Jun.2011
Microsoft MVP for Development Tools
- Visual Basic Jul. 2004 - Jun. 2009

 

カレンダー

<<  7月 2010  >>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

投稿一覧をカレンダーで表示