BT

C# 7と将来のC#についてMads Torgersen氏が語る

| 作者: Pierre-Luc Maheu フォローする 4 人のフォロワー , 翻訳者 徳武 聡 フォローする 0 人のフォロワー 投稿日 2016年7月4日. 推定読書時間: 4 分 |

原文(投稿日:2016/06/22)へのリンク

C#のプログラムマネージャであるMads Torgersen氏がQCon New York 2016でC# 7について語った。また、C#の進化と将来のバージョンの機能についても簡単に説明した。

ここ数年のクラウドと分散システムの勃興は開発者に新しい課題をもたらした。言語も開発者の進化に追従しなければならない。C#のような多目的言語の進化とは複数の関心事のバランスを取ることだ。
- 改良することとシンプルさを保つこと
- 既存の開発を改善することと新しいユーザを惹きつけること
- 新しいパラダイムを取り入れることとオブジェクト指向の精神を保つこと

.Net自体もここ数年で大きく変化した。
- Windows、Mac、Linuxのサポート(.Net Core)
- 配置システム
- ネイティブコードへのコンパイル(.Net Native)
- オープンソースコンパイラとパブリックなRoslyn API
- 複数のエディタ選択肢(OmniSharpとRoslynによって可能になった)
- オープンソースフレームワークとツール

C# 7
C# 7はVisual Studio 15に同梱される。現時点ではプレビューだ。新しい言語の機能を早く有効にするため、ポイントリリースも検討されている。実現すればマイナーリリースに新しい言語の機能が含まれるようになる。アーリーアダプターが可能な限り素早く個別の機能を利用できるようにするのが目的だ。

C# 7ではTupleが導入される予定だ。複数の値を返すメソッドが直接的に実現できる。

static (int sum, int count) Method()
{
    return (0, 0)
}
// Calling the method and using the result
var result = Method();
Console.WriteLine($"Sum:{result.sum}.Count: {result.count}.");

Tupleはジェネリック型の内部でも使える。値型なのでヒープではなくスタックを使う。これによってGCのオーバヘッドを避けられるので、性能面で優位になる。

// async method returning a tuple
static async Task<(int sum, int count)> Method()

// Dictionary using a tuple as a key
var dict = new Dictionary<(string first, string last), person>();

パターンマッチングの機能のいくつかが削られるという話が憶測を呼びパターンマッチング自体が諦められたという噂があったが、C# 7ではパターンマッチングは導入される。そして、将来のバージョンで強化されていく予定だ。

C# 7以降
いくつかの機能が将来のC#の機能として、現在実装が進められている。パターンマッチングについては、簡潔な記述ができるような新しい構文が検討されている。

// Using C# 7 pattern matching
if (O is Point p && p.X == 5) { WriteLine($"Y: {p.Y}")}

// Same scenario with alternative syntax for future versions
if (o is Point X {var x, Y: var y} && x == 5) { WriteLine($"Y: {y}")}

if (o is Point { X : 5, Y: var y}) { WriteLine($"Y: {y}")}

if (o is Point(5, var y)) { WriteLine($"Y: {y}")} 

Null許容型の実装も進んでいる。コンパイラが一貫性のないnull値の利用を検知したときに警告を上げる。

string? n;
string s;

n = null; // OK, nullable
s = null; // warning, shouldn't be null
s = n; // warning

WriteLine(s.Length); // Sure; it's not null
WriteLine(n.Length) // Warning! could be null

不変の値型であるレコード型も現在開発されている。不変性によって並列環境でも安全にデータを共有でき、プログラムも簡単に推論できる。レコード型によってC#で不変性を簡潔に実現できるようになる。レコードはデフォルトの値を持つので、ゲッターやGetHashCodeにそのまま使える。

 
 

Rate this Article

Relevance
Style
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT