これは、Visual Basic Advent Calendar 2014の12/25日の記事。
VB2015(VB14.0)の新機能として下記9項目を挙げたのですが、幾つかの機能については次のVB15.0以降になるようです。
やはり、この時点でVisual Studio 2015 Preview版に実装されていないのは持ち越しのようです。
.NET Compiler Platform ("Roslyn") のサイトにて「Added」の項目は追加されています。
【VB2015(VB14.0)の新機能】参照:VBの新しいステートメント、Upcoming Features in Visual Basic
1.Select Caseステートメントの拡張 → 次バージョンにて実装予定
2.読み取り専用の自動実装プロパティー
3.複数行にまたがった文字リテラル
4.yyyy-MM-dd型の日付リテラル
5.バイナリーリテラル → 次バージョンにて実装予定
6.数値区切りリテラル → 次バージョンにて実装予定
7.複数行にまたがるステートメントに対するコメント
8.バグ修正と小さな変更
1.XMLドキュメントコメントの修正
2.TypeOfステートメントでIsNot演算子の利用
3.パーシャルモジュールとパーシャルインターフェイスのサポート
4.#Reagion #End Regionがメソッド内部で定義可能
5.インターフェイスのReadOnly / WriteOnlyプロパティーを自動実装プロパティーで実装可能
6.Overridesキーワードがある場合のOverloadsキーワードの省略を可能に
7.属性の引数でボクシングの変換
9.C#で計画されたのをVBで検討中
1.パラメーターなし構造体のコンストラクタ
2.Dictonaryの初期化方法の追加(! operatorの追加) → 次バージョンにて実装予定
3.暗黙的に定義される参照引数(Output キーワードの追加) → 次バージョンにて実装予定
4.Catchブロック内でのAwaitキーワードのサポート → 次バージョンにて実装予定
10.その他
1.Null条件演算子
2.#pragmaの追加
3.スマート名前解決
9.1.パラメーターなし構造体のコンストラクタについて説明します。
この機能はVisual Studio 2015 Preview版で確認できました。
引数が無いコンストラクタ(New)を作成することが出来ます。
また、ReadOnly Propertyを使ってC#のように英大小文字の組合せで値をセット出来ます。
Public Structure Point
ReadOnly Property X As Integer
ReadOnly Property Y As Integer
Sub New()
Me.X = 0
Me.Y = 0
End Sub
Sub New(ByVal x As Integer, ByVal y As Integer)
Me.X = x
Me.Y = y
End Sub
End Structure
9.2.Dictonaryの初期化方法の追加(! operatorの追加)について説明します。
この機能はVisual Studio 2015 Preview版で確認できませんでした。
“!”演算子を使って初期化出来るようにしたかったと思われます。
Dim customer = New JsonData With {
!First = "Lucian", ' .Item("First") = "Lucian"
!Last = "Wischik" ' .Item("Last") = "Wischik"
}
! 演算子 (bang operator | 感嘆符演算子) は、Accessでは使ってた記憶がありますが、
VB.NETではすっかり忘れていました。
Default Public Property Itemとすると、ディクショナリ メンバ アクセス式 E!I は、式 E.D("I") に変換されます。
Dim x As New Dictionary(Of String, String)
x.Item("Foo") = "Bar"
x!Foo = "Bar"
Dim a = xx!Foo
Dim b = xx("Foo")
Dim c = xx.Item("Foo")
上記はVB.NETに以前からある機能です。この! 演算子の応用範囲を広げたいと思ったと思われます。
Dim x = New CC With { !name = “hello”}
9.3.暗黙的に定義される参照引数(Output キーワードの追加)について説明します。
この機能はVisual Studio 2015 Preview版で確認できませんでした。
C#のOut修復子をVBでも採用したかったと思われる。 C#のrefとoutの違い
(メソッド内でoutパラメータの値を使用することができず、必ずoutパラメータには新しい値を代入しなければなりません。)
' Callsite:
If Integer.TryParse(s, Output x) Then
' Declaration-site:
Function TryParse(s As String, Output x As Integer) As Boolean
9.4.Catchブロック内でのAwaitキーワードのサポートについて説明します。
この機能はVisual Studio 2015 Preview版で確認できませんでした。
C#のみサポートされて、VBはサポートされませんでした。
Dim res As Resource = Nothing
Try
res = Await Resource.OpenAsync(...) ' You could do this.
...
Catch ex As ResourceException
Await Resource.LogAsync(res, e) ' Now you can do this ...
Finally
If res IsNot Nothing Then Await res.CloseAsync() ' ... and this.
End Try
10.1.Null条件演算子
この機能はVisual Studio 2015 Preview版で確認できました。
' 従来の書き方
Private Function ToLower_OldStyle(s As String) As String
If (s Is Nothing) Then
Return Nothing
End If
Return s.ToLower()
End Function
' Null条件演算子「?」を使った書き方
Private Function ToLower_NewStyle(s As String) As String
Return s?.ToLower()
End Function
10.2.#pragmaの追加この機能はVisual Studio 2015 Preview版で確認できました。コンパイル時のワーニング出力を抑制します。
記述としては#pragmaは使わないで、#Disableと#Enableとなります。
#Disable Warning BC40008
#Enable Warning BC40008
10.3.スマート名前解決
この機能はVisual Studio 2015 Preview版で確認できました。
WPFのThreadingには、「System.Threading」と「System.Windows.Threading」の2種類があります。
WPFにした上でThreadingと入力後「.」を入力するとVB2015ではインテリセンスが表示されるようになっていますが、VB2013では何も表示されませんでした。ただこの機能の説明の英文を訳すかぎりでは両方表示されると書かれていたのですが、表示されたのは「System.Threading」のみでした。
【あとがき】
追記が遅れました。調べながら書いていきましたが、私の力不足もあり説明に誤りがあるかも知れません。
1つ1つ詳細に説明していければもっと良かったのですが、簡易的な説明くらいに留まってしまいました。
今のところ、日本の他ブログでも1つ1つを説明しているところは無いと思われるので、先行説明としては多少とも役に立ったかなと思います。
【追記】2015/12/20
見逃していた新機能をhilaponさんが書いてくれています。
nameof 演算子
文字列の中に式や変数を埋め込む(文字列補完)$を使用