++C++; // 未確認飛行 C ブログ

http://ufcpp.net/

Visual Studio 2014 CTP

with one comment

Visual Studio 2014 CTPのプレビュー版出てた。

2013とside-by-sideで入らないとのことでちょっとさすがに触れずにいたものの、1日遅れでAzure VM Galleryに並ぶようになったんでそちらを使ってVM上で試すことに。

MSDNブログ情報

MSの各製品チームとかから一斉に情報が。

side-by-side不可

もちろん最終的には他のバージョンのVisual Studioと共存できるようにするつもりだけども、今回は不具合が残っててできないということみたい。そのうち治るはず。

今は、そもそも別のバージョンが入っていたらインストーラーが警告出して止まる。回避方法もあるものの、VS 2014 CTPをインストールしてアンインストールすると、VS 2013とかに悪影響を残すとか。

C# 6.0 experimental

//build/ の前後で出た状態のRoslyn CTP以降、null伝搬 . 演算子が実装されたみたいですね。

null伝搬

以下のようなもの。要するに、p == null ? null : p.Name の短縮形。

using System;

 

class Program

{

        static void Main(string[] args)

        {

                X(null);

                X(new Point(1, 2, null));

                X(new Point(1, 2, "aaa"));

        }

 

        static int? X(Point p)

        {

                try

                {

                        var len = p?.Name.Length;

                        Console.WriteLine("no error " + len);

                        return len;

                }

                catch

                {

                        Console.WriteLine("error");

                        return null;

                }

        }

}

 

class Point(int x, int y, string name)

{

        public int X { get; } = x;

        public int Y { get; } = y;

        public string Name { get; } = name;

}

 

実行結果は以下の通り。

image

ちなみに、VS 2014 CTPを使ってみる他、Roslynのソースコードをgithubから最新版とってきてビルドすればVS 2013でも試せるはず。

null伝搬のショートサーキット

前にフォーラムをのぞいてみたところ、null伝搬演算子を左結合にするか右結合(ショートサーキット評価)にするか悩んでたはずですけども、上記の結果を見る限り、とりあえず現状では右結合(ショートサーキット評価)で実装されてるみたいですね。

右か左かっていうのは以下のような話。

  左結合 右結合(ショートサーキットあり)
a?.b?.c の解釈順 (a?.b)?.c a?.(b?.c)
a?.b?.c と同じ結果になるコード var b = a == null ? null : a.b;
var c = b == null ? null : b.c;
return c;
if (a == null) return null;
var b = a.b;
if (b == null) return null;
var c = b.c;
return c;
a?.b.c で、aがnullだったら (a?.b) の結果がnullなので、.c の時点でぬるぽ例外。 a == null 判定の時点でもう .c を見ないので、例外は出ずに null が返る。
判定順をあえて変えたい時は a?.(b?.c) という式がC#としては不自然で、1つの式では書けない (a?.b)?.c
採用の根拠 演算子はほとんどが左結合なので自然といえば自然。 条件演算子 ? : や null 結合演算子 ?? はショートサーキット評価なので、それと合わせるならこちらの方が自然。

 

C# 6.0 (試験実装)を使いたいなら

この機能、まだ正式にC# 6.0になったわけではないので、ビルド オプションで「C# 6.0」を選んでも使えません。というか、Visual StudioのUI上から設定できる場所はなくて、 .csproj を直接メモ帳とかで編集する必要があります。

C#チーム ブログで書かれてますが、<LangVersion>タグの中身を experimental に変えます。

cs-experimental

Written by ufcpp

2014年6月6日 @ 22:07

カテゴリー: .NET

1件のフィードバック

Subscribe to comments with RSS.

  1. […] Visual Studio 2014 CTP | ++C++; // 未確認飛行 C ブログ […]


コメントを残す