Más contenido relacionado
C#7の新機能
- 2. / 29
目的
・C# がバージョンアップして C# 7 になった。
・C# 7 で大きく 10 個の機能が追加された。
・その多くは、新しい事ができるようになるものではない。
・今まで冗長だったコードを簡潔に書けるようにするもの。
・ただし、複雑なルールもある。
・実例で詳しく見て、使いこなせるようになる。
2
- 6. / 29
C# 7 の新機能
'' New Features in C# 7.0(.NET Blog)より
01. Out variables
02. Pattern matching
03. Tuples
04. Deconstruction
05. Local functions
06. Literal improvements
07. Ref returns and locals
08. Generalized async return types
09. More expression bodied members
10. Throw expressions
- 7. / 29
01. Out variables
TryParse などの結果を受け取る変数が簡潔に定義できる。
7
この変数定義が冗長
ここで引数にすると同時に定義もできる
- 8. / 29
01. Out variables
8
if の中で宣言するが、if の後のブ
ロックの外までスコープがある
if の中が否定 (!) でも同様
失敗は 0
宣言した変数は書き換え可能
_ は値を破棄する。
Parse の可否だけが必要で
値は使わない場合に使用
- 9. / 29
02. Pattern matching
オブジェクトが特定の型の場合、処理をする。
その際、型の評価と同時にキャスト後の変数も宣言できる。
9
null の場合
型の評価と同時に変数も宣言できる
変数のスコープは if の中のみ
否定 (!) にすると変数のスコープは if の後方の外のみ
!注意! エラー処理などを記述
- 10. / 29
02. Pattern matching
10
型で評価、変数 c も同時に宣言
when で型だけでなく値も評価
その際、宣言した変数が使える
通常の switch と同様上から順に評価
!注意! default と null は別
null が後ろ
- 12. / 29
04. Deconstruction
前述の Tuple の各要素をそのまま変数に受けてしまう機能。強力。
12
このようなタプルを返すメソッドを呼ぶ際に
要素数分の変数を定義し要素を直接受けとる
型を変数ごとに書くことも可能
既に定義済みの変数でも OK
不要な値は _ で捨てる
- 17. / 29
05. Local functions
メソッド内でメソッドを定義する。
17
実際に呼び出す場所や return より後ろで定義できる
再帰処理ができる
型の宣言
変数の宣言と初期値として null の代入
=> や文末の ;
- 18. / 29
05. Local functions
18
yield を使ったイテレータの記述に便利、
らしいです
yield を使ったイテレータの記述は
ラムダではエラー
- 19. / 29
06. Literal improvements
数値リテラルの桁数などをわかりやすく記述できる。
19
数字の間に _ を挟める
3 桁ごとに_ を書くとわかりやすい
3 桁でなくとも好きな位置に _ を書ける
ビットパターン
4 桁ごとで分かりやすく
- 20. / 29
07. Ref returns and locals
値型の参照を return する。ゲームなどで大きなデータを扱う場合のパフォーマンスに。
20
参照を受け取って
参照を return
引数で渡した際の変数と、return を受けた
変数が同じ参照を持っている
(どちらを変えても両方変わる)
- 21. / 29
07. Ref returns and locals
21
配列の要素の参照を return
return 先で配列の要素を書き換えられる
return 先でも配列の要素を直接扱うので
パフォーマンスが良い、そうです
- 22. / 29
08. Generalized async return types
NuGet から System.Threading.Tasks.Extensions の追加が必要。
async メソッド内で await の場所を通らなかった場合、Task オブジェクトを作らない
22
これまで Task を使っていた場所で
ValueTask を使うだけ
await しない場合は Task オブジェクトは作られない
メモリーにやさしい
await する場合は Task オブジェクトが作られる
使い方も Task でも ValueTask でも変わらない
- 23. / 29
09. More expression bodied members
コンストラクター、ファイナライザー、プロパティの setter・getter、メソッドを式で
定義できる。これまでは、プロパティの getter のみ可能だった。
23
クラシック スタイル な記法
- 24. / 29
09. More expression bodied members
24
コンストラクター
ファイナライザー
プロパティ getter・setter
メソッド
式しか書けない
- 25. / 29
10. Throw expressions
式として Exception の throw が書ける。
25
null 合体演算子と組み合わせて
null のチェックに
前述のメソッドを式で定義する機能と
組み合わせて未実装メソッドをシンプルに
- 28. / 29
まとめ
・C# 7 では、簡潔に書ける機能が多く追加されました。
・簡潔 = プログラマの意図がそのままコードに表現できる。
・つまり、読みやすく、書きやすい。メンテナンスも容易で安全。
・なによりキーボードをたたく回数が減る。楽。
C# 7 を使いましょう!
28