これは、Visual Basic Advent Calendar 2014の12/8日の記事。
【VB2015(VB14.0)の新機能】参照:VBの新しいステートメント、Upcoming Features in Visual Basic
1.Select Caseステートメントの拡張
2.読み取り専用の自動実装プロパティー
3.複数行にまたがった文字リテラル
4.yyyy-MM-dd型の日付リテラル
5.バイナリーリテラル
6.数値区切りリテラル
7.複数行にまたがるステートメントに対するコメント
8.バグ修正と小さな変更
9.C# Previewの変更で検討中の機能
10.その他
1.Select Caseステートメントの拡張について説明します。
この機能を確認しようとVisual Studio 2015 Preview版をインストールしましたが、結果的にはまだ未実装でした。
Roslynのコードリポジトリ上も、masterブランチにはまだとりこまれていない機能なのか、pattern-matchingっていうブランチが
見られます。この機能が最終的に実装されるか分かりません。
こういう機能を追加したいと思っているのは確かなので、とりあえず説明していきます。
以前からVBやC#に関数型言語の特徴までを取り入れようとするのが見受けれられましたが、今回も同様です。
F#などの関数型言語には大体パターンマッチがあります。構文的にはSelect Case文に近いです。
数値や文字列だけであれば、今でもSelect Case文で問題ありません。しかし、型によるパターンマッチは今は出来ません。
下記はF#による型パターンマッチです。図形の形と長さを出力しています。
shapeの型で分岐し、更にwhenにてw=hが同じ値なら正方形、違うなら四角形としています。
type Shape =
| Rectangle of width:int * height:int
| Circle of radius:int
let shape = Rectangle(10,10)
match shape with
| Rectangle(w,h) when w=h -> printfn "Square %d" w
| Rectangle(w,h) -> printfn "Rectangle %d, %d" w h
| Circle(r) -> printfn "Circle %d" r
これと同じことをSelect Caseステートメントでも出来るよう拡張するのが、今回の目的です。 Public MustInherit Class Shape
End Class
Public Class Rectangle
Inherits Shape
Public Property Width As Integer
Public Property Height As Integer
End Class
Public Class Circle
Inherits Shape
Public Property Radius As Integer
End Class
Sub Main()
Dim shape As Shape = New Rectangle With {.Width = 10, .Height = 10}
Select Case shape
Case r As Rectangle When r.Width = r.Height
Console.WriteLine("Square of {0}", r.Width)
Case r As Rectangle
Console.WriteLine("Rectangle of {0},{1}", r.Width, r.Height)
Case c As Circle
Console.WriteLine("Circle of {0}", c.Radius)
End Select
End Sub
他にも下記のような使い方もできます。Private Sub Button_Click(sender As Object, e As EventArgs) Handles OKButton.Click, CancelButton.Click
Select Case sender
Case Is OKButton
DialogResult = DialogResult.OK
Close()
Case Is CancelButton
DialogResult = DialogResult.Cancel
Close()
Case Is Nothing
Throw New NullReferenceException("sender")
Case Else
Debug.Fail("Unknown sender.")
End Select
End Sub
以上です、便利そうなので実装されるといいのですが…。
【追記】
幾つかの機能については次のVB15.0以降になるようです。
やはり、この時点でVisual Studio 2015 Preview版に実装されていないのは持ち越しのようです。
.NET Compiler Platform ("Roslyn") のサイトにて「Added」の項目は実装されています。