SlideShare a Scribd company logo
1 of 36
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
using CSharp;
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

What's hot

Scalamacrosについて
ScalamacrosについてScalamacrosについて
Scalamacrosについて
dekosuke
 
Phpmatsuri2011 LT j_nakada
Phpmatsuri2011 LT j_nakadaPhpmatsuri2011 LT j_nakada
Phpmatsuri2011 LT j_nakada
Junpei Nakada
 

What's hot (18)

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

Similar to C# 7 Current Status

T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm
伸男 伊藤
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
Akira Inoue
 
知って得するC#
知って得するC#知って得するC#
知って得するC#
Shota Baba
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11
えぴ 福田
 

Similar to C# 7 Current Status (20)

Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
 
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
Spectacular Future with clojure.spec
Spectacular Future with clojure.specSpectacular Future with clojure.spec
Spectacular Future with clojure.spec
 
VerilatorとSystemC
VerilatorとSystemCVerilatorとSystemC
VerilatorとSystemC
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm
 
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
var RAC3 = ReactiveCocoa + Swift @ ReactiveCocoa Tokyo #rac_tokyo 10/18
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
 
知って得するC#
知って得するC#知って得するC#
知って得するC#
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 
並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js並列対決 Elixir × Go × C# x Scala , Node.js
並列対決 Elixir × Go × C# x Scala , Node.js
 
var RAC3 = ReactiveCocoa + Swift
var RAC3 = ReactiveCocoa + Swiftvar RAC3 = ReactiveCocoa + Swift
var RAC3 = ReactiveCocoa + Swift
 
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
 
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチZynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチ
 
ACRiウェビナー:岩渕様ご講演資料
ACRiウェビナー:岩渕様ご講演資料ACRiウェビナー:岩渕様ご講演資料
ACRiウェビナー:岩渕様ご講演資料
 
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
 
安全なプログラムの作り方
安全なプログラムの作り方安全なプログラムの作り方
安全なプログラムの作り方
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11
 

More from Takaaki Suzuki

More from Takaaki Suzuki (20)

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

Recently uploaded

Recently uploaded (11)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

C# 7 Current Status