C#7の新機能

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

Recomendados

C# 7.2 の新機能 von
C# 7.2 の新機能C# 7.2 の新機能
C# 7.2 の新機能m ishizaki
662 views24 Folien
.NET Core 3.0 に備えよう von
.NET Core 3.0 に備えよう.NET Core 3.0 に備えよう
.NET Core 3.0 に備えようm ishizaki
514 views26 Folien
.NET アプリを改善して実践する継続的インテグレーション von
.NET アプリを改善して実践する継続的インテグレーション.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーションYuta Matsumura
331 views33 Folien
NET 6で実装された新しいLINQ API von
NET 6で実装された新しいLINQ APINET 6で実装された新しいLINQ API
NET 6で実装された新しいLINQ APITomomitsuKusaba
786 views7 Folien
[2001/01/23] VSLive! / Visual C++.NET 新機能概要 von
[2001/01/23] VSLive! / Visual C++.NET 新機能概要[2001/01/23] VSLive! / Visual C++.NET 新機能概要
[2001/01/23] VSLive! / Visual C++.NET 新機能概要Tatsuhiko Tanaka
439 views23 Folien

Más contenido relacionado

Similar a C#7の新機能

.NETラボ2021年10月 .NETの過去と現在 von
.NETラボ2021年10月 .NETの過去と現在.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在TomomitsuKusaba
336 views27 Folien
The Twelve-Factor (A|M)pp with C# von
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#Yuta Matsumura
569 views56 Folien
今から始める、Windows 10&新.NETへの移行戦略 von
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略信之 岩永
30.4K views54 Folien
今から始める、Windows 10&新.NETへの移行戦略 von
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略信之 岩永
2.2K views54 Folien
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編) von
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)
Cisco Modeling Labs (CML)を使ってネットワークを学ぼう!(DevNet編)シスコシステムズ合同会社
5.2K views56 Folien
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ von
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ一希 大田
529 views21 Folien

Similar a C#7の新機能(20)

.NETラボ2021年10月 .NETの過去と現在 von TomomitsuKusaba
.NETラボ2021年10月 .NETの過去と現在.NETラボ2021年10月 .NETの過去と現在
.NETラボ2021年10月 .NETの過去と現在
TomomitsuKusaba336 views
The Twelve-Factor (A|M)pp with C# von Yuta Matsumura
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
Yuta Matsumura569 views
今から始める、Windows 10&新.NETへの移行戦略 von 信之 岩永
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
信之 岩永30.4K views
今から始める、Windows 10&新.NETへの移行戦略 von 信之 岩永
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
信之 岩永2.2K views
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ von 一希 大田
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
一希 大田529 views
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 - von Yukihiko SAWANOBORI
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
Yukihiko SAWANOBORI1.3K views
新しい Visual Studio & .NET と新時代のアーキテクチャ von 慎一 古賀
新しい Visual Studio & .NET と新時代のアーキテクチャ新しい Visual Studio & .NET と新時代のアーキテクチャ
新しい Visual Studio & .NET と新時代のアーキテクチャ
慎一 古賀12K views
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート von Akira Inoue
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデートデモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
Akira Inoue735 views
ASP.NET Core の ​ パフォーマンスを支える ​ I/O Pipeline と Channel von Joni
ASP.NET Core の ​ パフォーマンスを支える ​ I/O Pipeline と ChannelASP.NET Core の ​ パフォーマンスを支える ​ I/O Pipeline と Channel
ASP.NET Core の ​ パフォーマンスを支える ​ I/O Pipeline と Channel
Joni 179 views
ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜 von TrinityT _
ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜
ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜
TrinityT _2.3K views
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~ von Yuki Ando
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
Yuki Ando948 views
C# 9 のおすすめ新機能 von m ishizaki
C# 9 のおすすめ新機能C# 9 のおすすめ新機能
C# 9 のおすすめ新機能
m ishizaki1.1K views
dstn交流会_data_spider 3.0最新情報とデモ von dstn
dstn交流会_data_spider 3.0最新情報とデモdstn交流会_data_spider 3.0最新情報とデモ
dstn交流会_data_spider 3.0最新情報とデモ
dstn1.2K views
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み von 慎一 古賀
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
慎一 古賀1.9K views
Desktop app dev strategy for .net core 3.0 von Atsushi Nakamura
Desktop app dev strategy for .net core 3.0Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0
Atsushi Nakamura12.5K views
Ansible 2.8 アップデート情報 -機能追加と注意点- von akira6592
Ansible 2.8 アップデート情報 -機能追加と注意点-Ansible 2.8 アップデート情報 -機能追加と注意点-
Ansible 2.8 アップデート情報 -機能追加と注意点-
akira659217.2K views

Más de m ishizaki

継承辺りのもしかしたらマイナーかもしれない C# von
継承辺りのもしかしたらマイナーかもしれない C#継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#m ishizaki
1.1K views32 Folien
継承辺りのもしかしたらマイナーかもしれない C# von
継承辺りのもしかしたらマイナーかもしれない C#継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#m ishizaki
24 views32 Folien
Visual Studio を使わず .NET する von
Visual Studio を使わず .NET するVisual Studio を使わず .NET する
Visual Studio を使わず .NET するm ishizaki
275 views76 Folien
Xamarin で良くやっていたあれを MAUI でする話 von
Xamarin で良くやっていたあれを MAUI でする話Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話m ishizaki
909 views61 Folien
「スタバ」する話 von
「スタバ」する話「スタバ」する話
「スタバ」する話m ishizaki
232 views59 Folien
エンジニアと「スタバ」ツイートについて von
エンジニアと「スタバ」ツイートについてエンジニアと「スタバ」ツイートについて
エンジニアと「スタバ」ツイートについてm ishizaki
199 views10 Folien

Más de m ishizaki(20)

継承辺りのもしかしたらマイナーかもしれない C# von m ishizaki
継承辺りのもしかしたらマイナーかもしれない C#継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#
m ishizaki1.1K views
継承辺りのもしかしたらマイナーかもしれない C# von m ishizaki
継承辺りのもしかしたらマイナーかもしれない C#継承辺りのもしかしたらマイナーかもしれない C#
継承辺りのもしかしたらマイナーかもしれない C#
m ishizaki24 views
Visual Studio を使わず .NET する von m ishizaki
Visual Studio を使わず .NET するVisual Studio を使わず .NET する
Visual Studio を使わず .NET する
m ishizaki275 views
Xamarin で良くやっていたあれを MAUI でする話 von m ishizaki
Xamarin で良くやっていたあれを MAUI でする話Xamarin で良くやっていたあれを MAUI でする話
Xamarin で良くやっていたあれを MAUI でする話
m ishizaki909 views
「スタバ」する話 von m ishizaki
「スタバ」する話「スタバ」する話
「スタバ」する話
m ishizaki232 views
エンジニアと「スタバ」ツイートについて von m ishizaki
エンジニアと「スタバ」ツイートについてエンジニアと「スタバ」ツイートについて
エンジニアと「スタバ」ツイートについて
m ishizaki199 views
Build 2022 / Uno Platform von m ishizaki
Build 2022 / Uno PlatformBuild 2022 / Uno Platform
Build 2022 / Uno Platform
m ishizaki130 views
7 つの Blazor von m ishizaki
7 つの Blazor7 つの Blazor
7 つの Blazor
m ishizaki408 views
C# Tokyo コミュニティ説明 202205 版 von m ishizaki
C# Tokyo コミュニティ説明 202205 版C# Tokyo コミュニティ説明 202205 版
C# Tokyo コミュニティ説明 202205 版
m ishizaki1.2K views
仮想環境に MAUI 環境を構築する話 von m ishizaki
仮想環境に MAUI 環境を構築する話仮想環境に MAUI 環境を構築する話
仮想環境に MAUI 環境を構築する話
m ishizaki428 views
モバイルディスプレイ von m ishizaki
モバイルディスプレイモバイルディスプレイ
モバイルディスプレイ
m ishizaki575 views
Windows フォームアプリ 2022 von m ishizaki
Windows フォームアプリ 2022Windows フォームアプリ 2022
Windows フォームアプリ 2022
m ishizaki707 views
C# Tokyo コミュニティについて Short 版 von m ishizaki
C# Tokyo コミュニティについて Short 版C# Tokyo コミュニティについて Short 版
C# Tokyo コミュニティについて Short 版
m ishizaki627 views
C# Tokyo コミュニティ案内 von m ishizaki
C# Tokyo コミュニティ案内C# Tokyo コミュニティ案内
C# Tokyo コミュニティ案内
m ishizaki781 views
C# Tokyo コミュニティ説明 2021/01/29 版 von m ishizaki
C# Tokyo コミュニティ説明 2021/01/29 版C# Tokyo コミュニティ説明 2021/01/29 版
C# Tokyo コミュニティ説明 2021/01/29 版
m ishizaki555 views
秋葉原 C# もくもく会 von m ishizaki
秋葉原 C# もくもく会秋葉原 C# もくもく会
秋葉原 C# もくもく会
m ishizaki183 views
C# Tokyo guide 2020/12/25 von m ishizaki
C# Tokyo guide 2020/12/25C# Tokyo guide 2020/12/25
C# Tokyo guide 2020/12/25
m ishizaki348 views

Último

The Things Stack説明資料 by The Things Industries von
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things IndustriesCRI Japan, Inc.
73 views29 Folien
SSH応用編_20231129.pdf von
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdficebreaker4
366 views13 Folien
SNMPセキュリティ超入門 von
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門mkoda
420 views15 Folien
Windows 11 information that can be used at the development site von
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development siteAtomu Hidaka
89 views41 Folien
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) von
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
23 views38 Folien
定例会スライド_キャチs 公開用.pdf von
定例会スライド_キャチs 公開用.pdf定例会スライド_キャチs 公開用.pdf
定例会スライド_キャチs 公開用.pdfKeio Robotics Association
127 views64 Folien

Último(10)

The Things Stack説明資料 by The Things Industries von CRI Japan, Inc.
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things Industries
CRI Japan, Inc.73 views
SSH応用編_20231129.pdf von icebreaker4
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdf
icebreaker4366 views
SNMPセキュリティ超入門 von mkoda
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門
mkoda420 views
Windows 11 information that can be used at the development site von Atomu Hidaka
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development site
Atomu Hidaka89 views
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) von NTT DATA Technology & Innovation
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... von NTT DATA Technology & Innovation
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
光コラボは契約してはいけない von Takuya Matsunaga
光コラボは契約してはいけない光コラボは契約してはいけない
光コラボは契約してはいけない
Takuya Matsunaga24 views

C#7の新機能

  • 1. / 29 C#7 の新機能 城東.NET #7 2017年04月19日 石崎 充良 1
  • 2. / 29 目的 ・C# がバージョンアップして C# 7 になった。 ・C# 7 で大きく 10 個の機能が追加された。 ・その多くは、新しい事ができるようになるものではない。 ・今まで冗長だったコードを簡潔に書けるようにするもの。 ・ただし、複雑なルールもある。 ・実例で詳しく見て、使いこなせるようになる。 2
  • 5. / 29 新機能の概要(3/3) .NET Blog New Features in C# 7.0 https://blogs.msdn.microsoft.com/dotnet/2017/03/09/new-features-in-c-7-0/ 5
  • 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 が後ろ
  • 11. / 29 03. Tuples 複数の値をひとまとめにする。メソッドの return 値に特に有効 11 複数の値を ( ) で囲んで return 値にできる 複数の値を ( ) で囲んで return できる 値の取り出しは、Item1~ 既存の Tuple<T1,~> と あまり変わらない 各要素に名前を付けられる 名前で取り出せる
  • 12. / 29 04. Deconstruction 前述の Tuple の各要素をそのまま変数に受けてしまう機能。強力。 12 このようなタプルを返すメソッドを呼ぶ際に 要素数分の変数を定義し要素を直接受けとる 型を変数ごとに書くことも可能 既に定義済みの変数でも OK 不要な値は _ で捨てる
  • 14. / 29 04. Deconstruction 魔法のメソッド Deconstruct 14 out 引数を持った Deconstruct という メソッドがあると out 引数の組と同じタプルへ代入式で分解できる
  • 15. / 29 04. Deconstruction 15 拡張メソッドで Deconstruct を定義すれば 既存の型も分解可能
  • 16. / 29 04. Deconstruction 16 引数違いの Deconstruct は定義可能 問題なく使える
  • 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 のチェックに 前述のメソッドを式で定義する機能と 組み合わせて未実装メソッドをシンプルに
  • 26. / 29 10. Throw expressions 26 モダン スタイル レトロ スタイル
  • 28. / 29 まとめ ・C# 7 では、簡潔に書ける機能が多く追加されました。 ・簡潔 = プログラマの意図がそのままコードに表現できる。 ・つまり、読みやすく、書きやすい。メンテナンスも容易で安全。 ・なによりキーボードをたたく回数が減る。楽。 C# 7 を使いましょう! 28