2014年9月24日水曜日

「Roslyn」C# 6.0とVB 12.0の新機能

C# 6.0のみにリリース


自動プロパティ初期化

 public string text { get; set; } = "初期値";
のように書ける。VBには存在。

静的名前環境のusing

using System.Console;
WriteLine("Consoleを省略可能!");
setCursorPos(10,10);
のように書ける。これもVBには存在。

catchのでキャッチした例外によって条件分岐

try{ .. } catch ( MyException ex ) if ( ex.Count = 5 ) ...
ッて感じでかける。 これも、VBには存在。

式木のメンバー化

public double Dist => Sqrt(x * x + y * y);
なぜ、VBにはリリース予定にならないんだ!

VB 12.0のみにリリース

インデックス化されたメンバーの初期化

Dim someObject As JObject = New JObject With { $x = 10, $y = 8}
逆にC#は対応していない

Select(Switch)文が更に進化

Typecase Select Case o : Case s As String : …

Guarded cases Select Case i : Case Is > 0 When i Mod 2 = 0

どんな感じになるか楽しみ。

Partial Module / Interface

ModuleはC#にないので、VBのみ。
Partial InterfaceはC#には存在。

<newline>

VBの最も大きい短所と言ってもいい、改行が改善!
Dim s As String = "ABC" + Enviroment.NewLine + "DEF"
Dim s As String = "ABC" + VbCrLf + "DEF"
と書いていたのが、
Dim s As String = "ABC<newline>DEF"
と書けるように!

#year-month-day#という文字列からDateへ変換

Dim date = #2020-1-14#
と書くと、Dateに!

複数行コメント

使う人はよく使う?実装されるらしい。どうなるのかな?

TypeOf ~ IsNot ~

題名の通り。Not(TypeOf ~ Is ~)もできるが。もっとわかり易くなる。

NullableのTryCast

Dim l = TryCast(i , Long?)
とできるように。え?出来なかったの?と思ってしまった。

+-,-=,/=,*=....

歓喜
この調子で、++や--も・・・

Implicitly Implement

Class C Implicitly Implements I
ッて感じ

NameOf

Dim s As String = NameOf(Console.WriteLine)
ッて感じ。"WriteLine"か"System.Console.WriteLine"になるのか?

Strict Module

VBにはstatic class的なものがな~い!ということで実装なのかな?

CIntが早くなる

エイゴヨメマセン

#progma

夢が広がりング!

If関数でNothingの代入

題名の通り。
IF(true, some, Nothing)
C#でやると、
true ? some : null



C#/VBで両方にリリース


プライマリコンストラクタ

class someclass( int x ) {
public int X { get; set; } = x;
}
Class SomeClass( x As Integer ) 
Public Property X As Integer  = x
Get ... End Set
End Property
End Class
みたいな?

Getオンリーのプロパティの初期化

上記の様な感じ

Dictionaryの初期化

できなかったっけ?

Declaration expressions

int.TryParse( "3210", out var i );
Integer.TryParse( "3210", ByVal Dim i )
ッて感じにかける。VBの書き方知らないので怪しい。

try/catch内のawait

Microsoftの技術力は恐ろしい。

2進数でかく

0b000010ってなかんじ

区切り文字

21_324_12832_231ッて感じに書けるようになるのかな?制約とかはわからない。

初期化時にイベントの追加

Window win = new Window("Window") { Actived += (sender, e) => {} };
Dim win As New Window("Window") With { AddHandler Actived, Sub(sender, e) ...}
って感じかな?VBの書き方はやっぱり知らないので怪しい。

Nullでもおk

customer?.Orders?[5]?.$price
という事が可能になる。


他にも4つありますが、全然情報ないので割愛します。

ほかのサイトでは、複数の型を戻り値にできるとかありましたが、CodeProjectのページには書かれていませんでした。しかし、とても…楽しみです。

CodePlexのページ : https://roslyn.codeplex.com/