ページ

2009年6月17日水曜日

[VB10] Visual Basic 2010 の新機能

VB10 (VB2010 って言った方がいいんだろうか?) を追っかけてる人には何を今さらっていう話題なんでしょうが、ついさっき知って軽くショックを受けたのでw

VB10 の新機能が What's New in Visual Basic 2010 にあります。

最初の自動実装プロパティは C# に以前からある機能に似てますね。
ただ、C# と違うのは

Public Property Name As String

とすると自動的に _Name という Private なフィールドが作られるそうです。
もちろんコード内で _Name にアクセスすることもできるし、デバッガでウォッチするようなこともできるそうです。ただし、インテリセンスには出ないようになってるとのこと。
C# では予測できない長い名前が生成されるのに比べると考え方がずいぶん違いますね。

続いて コレクション・イニシャライザ

Dim winterMonths = {"December", "January", "February"}

こんな風に書けると。
C# とほとんど同じですね。というか、VB で { } を使うのってどうなの?という気がしちゃうんですがw
それよりも、Dim が C# の var とほとんど同じ意味だってことがいまだになじまないなぁ。
(上記は As Object() ではなく、きちんと型推論されて As String() になります)

そして暗黙的な行継続。ここ の中ほどの “Implicit Line Continuation”。
ついに VB でも “_” 無しで改行できるようになるんですね。
が、細かいルールがあるようで表になってます。
”_” 無しで改行できるのは

  • カンマ “,” の後。
  • “(“ の後、”)” の前。
  • “{“ の後、”}” の前。
  • XML リテラルの中の “<%=“ の後、”%>” の前。
  • 文字列結合演算子の “&” の後。
  • 代入演算子 (=, &=, +=, <<= など) の後。
  • 二項演算子 (+, ?, Mod, <, <=, And, AndAlso など) の後。
  • “Is” と “IsNot” の後。
  • メンバ名の “.” の後、メンバ名の前。ただし、With ステートメントや初期化リストの中では “_” が必要とかなんとか。
  • XML リテラルの中の “.”、”.@”、”…” の後。ただし、With キーワードの中では “_” が必要とかなんとか。
  • 属性を示す “<” の後、”>” の前。ただし、アセンブリレベルとモジュールレベルの属性のときは “_” が必要。
  • LINQ の “From”、”Order By”、”Select” などの前後。ただし、”Order By” などを途中で改行してはダメ。
  • For Each ステートメントの In の後。
  • コレクション・イニシャライザの From キーワードの後。

だそうです。
うーん、なんと言うか、努力賞ものですね。
まぁ、「ここなら改行して良さそう」 と思えるようなところでは改行して大丈夫みたいなので使う分には混乱は少なそうではありますが。

それと 複数行のラムダ式

Dim increment1 = Function(x) x + 1
Dim increment2 = Function(x)
Return x + 2
End Function
Console.WriteLine((Function(num As Integer) num + 1)(5))

(複数行なのは 2つ目の increment2 だけですが)
この複数行のラムダ式のときの Function . . . End Function は普通の Function . . . End Function と同じように扱われるから行末に “_” は要らないのかな?
いや、実はラムダ式は式だから行末に “_” が必要だけど、上記の暗黙的な行継続によって “_” を省略できてるだけってことなのかな?

他にも新機能はあるようですが省略。


1 件のコメント:

  1. > わんくま勉強会用にいただいていいでしょうか?
    もちろん、構いませんよ。
    いいかげんな要約ですが、ご自由にお使いください。
    あと、行継続について↓にも書きましたので、よろしかったそちらもどうぞ。
    http://shinichiaoyagi.blog25.fc2.com/blog-entry-173.html

    返信削除

注: コメントを投稿できるのは、このブログのメンバーだけです。