SlideShare a Scribd company logo
CLR/H in Tokyo 第 11 回
鈴木 孝明
C# 7 Current Status
- 今ある機能、全部見せます -
Name
鈴木 孝明
Twitter Account
@xin9le
Award
Microsoft MVP for Visual Studio
and Development Technologies
Web Site
http://xin9le.net
About Me
C# 7 Current Status
C# 7 Current Status
using CSharp;
C# 7 Current Status
Grani, Inc. MVPs
@neuecc
Visual C#
http://neue.cc/
@guitarrapc_tech
PowerShell
http://tech.guitarrapc.com/
@mayuki
Visual C# (たぶん)
http://www.misuzila.org/
@xin9le
Visual C#
http://xin9le.net/
Grani, Inc. MVPs
@neuecc
Visual C#
http://neue.cc/
@guitarrapc_tech
PowerShell
http://tech.guitarrapc.com/
@mayuki
Visual C# (たぶん)
http://www.misuzila.org/
@xin9le
Visual C#
http://xin9le.net/
四天王の中でも最弱 /(^o^) \
2016/07/162016/05/21
ここ半年は C# 7 の追っかけ
2015/07/20
VS 2015 と共に C# 6 リリース
2016/03/31
//build/ 2016 で初めて C# 7 をデモ
Visual Studio “15”
2016/04/05 : Preview
2016/xx/xx : RC
2016/05/10 : Preview 2
2016/07/07 : Preview 3
2016/08/22 : Preview 4
2016/10/05 : Preview 5
約 1.5 ヵ月
ペースで更新
全 11 機能の簡単なまとめ
New Features
var bin = 0b1011; //--- New!!
var dec = 123;
var hex = 0x1F;
Binary Literals
利用可能な
数字:
0 / 1
接頭辞:
0b / 0B2 進数表記
var bin = 0b1100_1010; //--- 4ビットずつ
var dec = 12_345_678; //--- 通貨の区切りっぽく
var hex = 0x33_ff_cc; //--- RGB 区切り
Digit Separators
先頭 / 末尾
以外は
いくつでも
自由な
桁区切り
if (int.TryParse("123", out var value))
Console.WriteLine(value);
Out Variable Declarations
式の途中で
変数宣言
static void Main()
{
IEnumerable<T> twice<T>(T x)
where T : struct
{
yield return x;
yield return x;
}
var xs = twice(12.3);
}
Local Functions
Generics
yield
なんでもOK
関数内で
のみ使える
関数
static void Main()
{
var a = 1;
ref var d = ref PassThrough(ref a);
d = 2;
// (a, d) = (2, 2)
}
static ref int PassThrough(ref int b)
{
ref var c = ref b;
return ref c;
}
Ref Locals / Ref Returns
メモリ効率
向上
参照受け
参照返し
(int sum, int count) Tally(IEnumerable<int> list)
{
var s = 0; var c = 0;
foreach (var x in list)
{
s += x;
c++;
}
return (s, c);
}
(int a, int b) t = Tally(new []{ 1, 2, 3 });
Tuples
ValueTuple
の糖衣構文
多値戻り値
サポート
//--- タプル型のインスタンスを
var t = (123, "abc");
//--- 変数に分解
(int x, string y) = t;
(var x, var y) = t;
var (x, y) = t;
Deconstructions
入れ子もOK
任意の型を
分解可能
より狭い
スコープ
//--- 定数マッチング
var v = x is 123;
//--- 型マッチング
object x = "abc";
if (x is string v)
{
//--- 何か v を用いた処理
}
Type Switch - is -
より簡易で
厳密な判定
object x = 123;
switch (x)
{
case "abc":
break;
case int v when 100 < v: //--- v が 100 より大きいとき
break;
case int v: //--- v が 100 以下のとき
break;
}
Type Switch - switch -
より強力な
条件分岐
when 句での
条件設定
(case guard)
class Program
{
//--- ラムダ形式メンバーに
public string Name => throw new NotImplementedException();
public string SayHello() => throw new NotImplementedException();
//--- 条件演算子 / null 結合演算子に
public int ParseAsInt(string value)
=> int.TryParse(value, out var x)
? x
: throw new ArgumentException(nameof(value));
}
Throw Expressions
コンパクト
に書ける
class Program
{
//--- プロパティやインデクサのアクセサに
public string Property
{
get => "Getter Property";
set => Console.WriteLine(value);
}
//--- コンストラクタ / デストラクタにも
public Program(string text) => Console.WriteLine(text);
~Program() => Console.WriteLine("Destructor");
}
Expression-Bodied Everything
{ } を
より少なく
async ValueTask<int> GetValueAsync()
{
await Task.Delay(1000);
return 123;
}
Arbitrary Async Returns
既存型にも
適用可能
(予定)
Task 以外の
戻り値
Learn more…
C# vNext
http://blog.xin9le.net/entry/csharp-vnext
https://github.com/xin9le/TryCSharpVNext
Samples on GitHub
見送られたけど、議論/検討されていた機能たち
Under Considerations
Non-null Reference Types
参照型は元々 null 許可だけど、非 null な参照型も導入したい
互換性をどう維持するかが非常に重たい課題
Wire Format
通信に使うデータ形式 (Json etc.) とのより簡易なやりとり
データ形式の緩い型付けと C# の強い型付けのつなぎ込みが課題
議論されていた未搭載機能 #1
Record Types
Immutable な型を超簡単に書けるようにしたい
C# 6 の頃に Primary Constructor として検討されていたヤツ
Supersedes
関数/プロパティなどの前後に処理を挟み込む機能
Source Generators として一時期 C# 7 の master に入っていた
議論されていた未搭載機能 #2
Pattern Matching
型や値の条件分岐をよりスッキリ書けるように
Type Switch と呼ばれる is / switch 拡張だけ先行搭載される見込み
Async Streams
非同期コレクション (= IAsyncEnumerable) の列挙をより簡単に
foreach (await var x in asyncStreams) みたいに書けないか
議論されていた未搭載機能 #3
Enjoy new features and future of C#!!
Thank you
One more thing…
最先端を追求するグラニの新たな取り組み
What’s New in Grani
オフィス体験
最先端のスキャン技術
超高精細なオフィスを再現
もちろん C# + Unity で開発
継続的な投資
今後もコンテンツ作成予定
得た知見の共有
VR/AR に挑戦
ブースでご体験ください

More Related Content

PPTX
4 Colors Othello’s Algorithm
PPTX
Live Coding で学ぶ C# 7
PDF
基礎からC言語 part1
PPTX
C++ tips 3 カンマ演算子編
PPT
Ilerpg Study 006
PPT
Ilerpg Study 003
PDF
Tokyo.R #19 発表資料 「Rで色々やってみました」
PPT
Ilerpg Study 004
4 Colors Othello’s Algorithm
Live Coding で学ぶ C# 7
基礎からC言語 part1
C++ tips 3 カンマ演算子編
Ilerpg Study 006
Ilerpg Study 003
Tokyo.R #19 発表資料 「Rで色々やってみました」
Ilerpg Study 004

What's hot (18)

PPTX
Coqでsprintf
PPTX
Coqでsprintf
PPT
Ilerpg Study 002
PDF
Better C#の脱却を目指して
PPTX
Coq 20100208a
PPTX
N3495 inplace realloc
PDF
20150928楽しいlambda
PDF
Implementation of Counters in ScopedBASIC
PDF
Visual studio 14 CTP2 概要
PPTX
トランジスタの接合容量(C-B)シミュレーション
PPTX
Scalamacrosについて
PDF
GaucheでCGIプログラミング
PDF
ライントレースで役立った「キュー」の話し
PDF
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
PDF
Phpmatsuri2011 LT j_nakada
PDF
Clrh 20140906 lt
PDF
Pact言語によるセキュアなスマートコントラクト開発
Coqでsprintf
Coqでsprintf
Ilerpg Study 002
Better C#の脱却を目指して
Coq 20100208a
N3495 inplace realloc
20150928楽しいlambda
Implementation of Counters in ScopedBASIC
Visual studio 14 CTP2 概要
トランジスタの接合容量(C-B)シミュレーション
Scalamacrosについて
GaucheでCGIプログラミング
ライントレースで役立った「キュー」の話し
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
Phpmatsuri2011 LT j_nakada
Clrh 20140906 lt
Pact言語によるセキュアなスマートコントラクト開発
Ad

Similar to C# 7 Current Status (20)

PDF
C#勉強会 ~ C#9の新機能 ~
PDF
20141129-dotNet2015
PPTX
C#6.0の新機能紹介
PPTX
Deep Dive C# 6.0
PPTX
(ゲームじゃない方の)switchで遊びたい話
PPTX
C# design note sep 2014
PDF
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
PPTX
C# 8.0 Preview in Visual Studio 2019 (16.0)
PPTX
復習も兼ねて!C#6.0-7.0
PPTX
C# 9.0 / .NET 5.0
PPTX
C# 7 New Features
PPTX
.NET Core 2.x 時代の C#
PDF
プログラミングNet framework3のお題
PPTX
Microsoft Learn で C# を学ぶとどんな感じ?
PDF
今日からできる!簡単 .NET 高速化 Tips
PPTX
.NET Compiler Platform
PPTX
Visual Studio 2008による 開発環境・プログラミングの進化
PPTX
Visual Studio による開発環境・プログラミングの進化
PPTX
C#言語機能の作り方
PDF
C#勉強会
C#勉強会 ~ C#9の新機能 ~
20141129-dotNet2015
C#6.0の新機能紹介
Deep Dive C# 6.0
(ゲームじゃない方の)switchで遊びたい話
C# design note sep 2014
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C# 8.0 Preview in Visual Studio 2019 (16.0)
復習も兼ねて!C#6.0-7.0
C# 9.0 / .NET 5.0
C# 7 New Features
.NET Core 2.x 時代の C#
プログラミングNet framework3のお題
Microsoft Learn で C# を学ぶとどんな感じ?
今日からできる!簡単 .NET 高速化 Tips
.NET Compiler Platform
Visual Studio 2008による 開発環境・プログラミングの進化
Visual Studio による開発環境・プログラミングの進化
C#言語機能の作り方
C#勉強会
Ad

More from Takaaki Suzuki (20)

PDF
5 分で学ぶ Interpolated String Handler
PDF
C# における Redis 徹底活用
PDF
Inside FastEnum
PDF
30min Serverless xTuber
PPTX
Tetris Algorithm
PPTX
Sharing Deep Dive
PDF
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
PDF
DeclarativeSql
PDF
Sevens Algorithm
PDF
Friendly
PDF
WPF Interoperability
PDF
Universal Appとは? -デバイスに依存しないアプリケーション開発-
PDF
酒の肴はC# vNext
PDF
Async History in .NET
PDF
SignalR Tune-up
PDF
Twilioと.NET
PDF
Programmer's Brain
PDF
What's MVP
PDF
C#のココが好き!
PDF
Non-Stop Experience
5 分で学ぶ Interpolated String Handler
C# における Redis 徹底活用
Inside FastEnum
30min Serverless xTuber
Tetris Algorithm
Sharing Deep Dive
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
DeclarativeSql
Sevens Algorithm
Friendly
WPF Interoperability
Universal Appとは? -デバイスに依存しないアプリケーション開発-
酒の肴はC# vNext
Async History in .NET
SignalR Tune-up
Twilioと.NET
Programmer's Brain
What's MVP
C#のココが好き!
Non-Stop Experience

C# 7 Current Status