Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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://xin9...
using CSharp;
Grani, Inc. MVPs
@neuecc
Visual C#
http://neue.cc/
@guitarrapc_tech
PowerShell
http://tech.guitarrapc.com/
@mayuki
Visual ...
Grani, Inc. MVPs
@neuecc
Visual C#
http://neue.cc/
@guitarrapc_tech
PowerShell
http://tech.guitarrapc.com/
@mayuki
Visual ...
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...
全 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 Separa...
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...
static void Main()
{
var a = 1;
ref var d = ref PassThrough(ref a);
d = 2;
// (a, d) = (2, 2)
}
static ref int PassThrough...
(int sum, int count) Tally(IEnumerable<int> list)
{
var s = 0; var c = 0;
foreach (var x in list)
{
s += x;
c++;
}
return ...
//--- タプル型のインスタンスを
var t = (123, "abc");
//--- 変数に分解
(int x, string y) = t;
(var x, var y) = t;
var (x, y) = t;
Deconstruc...
より狭い
スコープ
//--- 定数マッチング
var v = x is 123;
//--- 型マッチング
object x = "abc";
if (x is string v)
{
//--- 何か v を用いた処理
}
Type Swi...
object x = 123;
switch (x)
{
case "abc":
break;
case int v when 100 < v: //--- v が 100 より大きいとき
break;
case int v: //--- v ...
class Program
{
//--- ラムダ形式メンバーに
public string Name => throw new NotImplementedException();
public string SayHello() => th...
class Program
{
//--- プロパティやインデクサのアクセサに
public string Property
{
get => "Getter Property";
set => Console.WriteLine(value)...
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.) とのより簡...
Record Types
Immutable な型を超簡単に書けるようにしたい
C# 6 の頃に Primary Constructor として検討されていたヤツ
Supersedes
関数/プロパティなどの前後に処理を挟み込む機能
Sourc...
Pattern Matching
型や値の条件分岐をよりスッキリ書けるように
Type Switch と呼ばれる is / switch 拡張だけ先行搭載される見込み
Async Streams
非同期コレクション (= IAsyncEnume...
Enjoy new features and future of C#!!
Thank you
One more thing…
最先端を追求するグラニの新たな取り組み
What’s New in Grani
オフィス体験
最先端のスキャン技術
超高精細なオフィスを再現
もちろん C# + Unity で開発
継続的な投資
今後もコンテンツ作成予定
得た知見の共有
VR/AR に挑戦
ブースでご体験ください
C# 7 Current Status
C# 7 Current Status
C# 7 Current Status
Upcoming SlideShare
Loading in …5
×

C# 7 Current Status

1,414 views

Published on

2016/10/22 時点での C# 7 の新機能についてご紹介

Published in: Technology
  • Be the first to comment

  • Be the first to like this

C# 7 Current Status

  1. 1. CLR/H in Tokyo 第 11 回 鈴木 孝明 C# 7 Current Status - 今ある機能、全部見せます -
  2. 2. Name 鈴木 孝明 Twitter Account @xin9le Award Microsoft MVP for Visual Studio and Development Technologies Web Site http://xin9le.net About Me
  3. 3. using CSharp;
  4. 4. 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/
  5. 5. 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^) \
  6. 6. 2016/07/162016/05/21 ここ半年は C# 7 の追っかけ
  7. 7. 2015/07/20 VS 2015 と共に C# 6 リリース
  8. 8. 2016/03/31 //build/ 2016 で初めて C# 7 をデモ
  9. 9. 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 ヵ月 ペースで更新
  10. 10. 全 11 機能の簡単なまとめ New Features
  11. 11. var bin = 0b1011; //--- New!! var dec = 123; var hex = 0x1F; Binary Literals 利用可能な 数字: 0 / 1 接頭辞: 0b / 0B2 進数表記
  12. 12. var bin = 0b1100_1010; //--- 4ビットずつ var dec = 12_345_678; //--- 通貨の区切りっぽく var hex = 0x33_ff_cc; //--- RGB 区切り Digit Separators 先頭 / 末尾 以外は いくつでも 自由な 桁区切り
  13. 13. if (int.TryParse("123", out var value)) Console.WriteLine(value); Out Variable Declarations 式の途中で 変数宣言
  14. 14. 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 関数内で のみ使える 関数
  15. 15. 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 メモリ効率 向上 参照受け 参照返し
  16. 16. (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 の糖衣構文 多値戻り値 サポート
  17. 17. //--- タプル型のインスタンスを var t = (123, "abc"); //--- 変数に分解 (int x, string y) = t; (var x, var y) = t; var (x, y) = t; Deconstructions 入れ子もOK 任意の型を 分解可能
  18. 18. より狭い スコープ //--- 定数マッチング var v = x is 123; //--- 型マッチング object x = "abc"; if (x is string v) { //--- 何か v を用いた処理 } Type Switch - is - より簡易で 厳密な判定
  19. 19. 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)
  20. 20. 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 コンパクト に書ける
  21. 21. 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 { } を より少なく
  22. 22. async ValueTask<int> GetValueAsync() { await Task.Delay(1000); return 123; } Arbitrary Async Returns 既存型にも 適用可能 (予定) Task 以外の 戻り値
  23. 23. Learn more… C# vNext http://blog.xin9le.net/entry/csharp-vnext
  24. 24. https://github.com/xin9le/TryCSharpVNext Samples on GitHub
  25. 25. 見送られたけど、議論/検討されていた機能たち Under Considerations
  26. 26. Non-null Reference Types 参照型は元々 null 許可だけど、非 null な参照型も導入したい 互換性をどう維持するかが非常に重たい課題 Wire Format 通信に使うデータ形式 (Json etc.) とのより簡易なやりとり データ形式の緩い型付けと C# の強い型付けのつなぎ込みが課題 議論されていた未搭載機能 #1
  27. 27. Record Types Immutable な型を超簡単に書けるようにしたい C# 6 の頃に Primary Constructor として検討されていたヤツ Supersedes 関数/プロパティなどの前後に処理を挟み込む機能 Source Generators として一時期 C# 7 の master に入っていた 議論されていた未搭載機能 #2
  28. 28. Pattern Matching 型や値の条件分岐をよりスッキリ書けるように Type Switch と呼ばれる is / switch 拡張だけ先行搭載される見込み Async Streams 非同期コレクション (= IAsyncEnumerable) の列挙をより簡単に foreach (await var x in asyncStreams) みたいに書けないか 議論されていた未搭載機能 #3
  29. 29. Enjoy new features and future of C#!! Thank you
  30. 30. One more thing…
  31. 31. 最先端を追求するグラニの新たな取り組み What’s New in Grani
  32. 32. オフィス体験 最先端のスキャン技術 超高精細なオフィスを再現 もちろん C# + Unity で開発 継続的な投資 今後もコンテンツ作成予定 得た知見の共有 VR/AR に挑戦
  33. 33. ブースでご体験ください

×