復習も兼ねて!
C# 6.0 – 7.0
2017/03/25 Fukuoka.NET #6
@tsubakimoto_s
自己紹介
松村 優大 (Yuta Matsumura)
MLBお兄さん (通称)
C# / PHP / Frontend / Azure / AWS
Microsoft MVP
(Visual Studio and Development Technologies)
所属 コミュニティ
2
Cognitive Services
な個人ネタ
3
Cognitive Servicesは
メジャーリーガーの
"ヒゲ"を識別できるか
http://tsubalog.hatenablog.com/entry/2016/07/02/175417
4
5
6
7
8
本題
9
★祝★
Visual Studio 2017
10
https://ja.wikipedia.org/wiki/Microsoft_Visual_Studio
Visual Studio 2005
.NET Framework 2.0
64bit Application
Visual Studio 2008
.NET Framework 3.0
.NET Framework 3.5
Visual Studio 2010
.NET Framework 4.0
F#, HTML5, CSS3
Visual Studio 2012
.NET Framework 4.5
Windows8 Application
Visual Studio 2013
.NET Framework 4.5.1
Git, TypeScript, Cummunity Edition
Visual Studio 2015
.NET Framework 4.6
.NET Core, Xamarin, Apache Cordova
11
https://www.visualstudio.com/ja/vs/whatsnew/
Visual Studio 2017
12
https://blogs.msdn.microsoft.com/visualstudio_jpn/2017/03/14/iterations-on-infinity/13
VS2017の新機能
•インストーラの刷新
•起動時間&読込時間の短縮
•ライブ単体テスト
•ツール群の充実
•C# 7.0, Visual Basic 15 のサポート
https://www.visualstudio.com/ja-jp/news/releasenotes/vs2017-relnotes 14
充実のツール群
•.NET Core, ASP.NET Core
•UWP
•Xamarin
•Apache Cordova
•Unity
•Node.js
•Office
•Azure
https://www.visualstudio.com/ja-jp/news/releasenotes/vs2017-relnotes 15
VS2017の新機能
•インストーラの刷新
•起動時間&読込時間の短縮
•ライブ単体テスト
•ツール群の充実
•C# 7.0, Visual Basic 15 のサポート
https://www.visualstudio.com/ja-jp/news/releasenotes/vs2017-relnotes 16
New Features in C# 7.0
17
の前に
18
New Features in C# 6.0
実用性の高い機能を紹介
19
自動実装プロパティ
•プロパティに値を直接代入
•readonlyなプロパティも初期化可能
•式による初期化も可能
class Fukuten
{
string Name { get; set; } = "Fukuten";
string Place { get; } = "福岡";
DateTime EventDate { get; set; }
= DateTime.Parse("2017/03/25");
} 20
メソッド定義にラムダ式を使う
•シンプルなメソッドで活用
•戻り値に return は使わない
•戻り値が無いメソッドでも使える
string GetWeekOfDay()
=> EventDate.ToString("dddd");
void ShowWeekOfDay(string w)
=> Console.WriteLine(GetWeekOfDay()); 21
プロパティ定義にラムダ式を使う
•Getterをラムダ式で定義
•getキーワード不要
int Length => Name.Length;
DateTime NextWeek => EventDate.AddDays(7);
// 以前の書き方
DateTime NextWeek
{
get { return EventDate.AddDays(7); }
} 22
Null条件演算子
•? を使いましょう
•対象がnullでなければ後続の処理を
行う
string GetDay(DateTime? d)
=> d?.ToString();
// 以前の書き方
string GetDay(DateTime? d)
{
return d == null ? null : d.ToString();
} 23
文字列補間
•文字列内の変数埋め込み
•バグが潜みやすい string.Format を
駆逐できる
string Say(string name) => $"Hi, {name}";
// 以前の書き方
string Say(string name)
{
return string.Format("Hi, {0}", name);
} 24
nameof演算子
•引数の式の“名前”を返す
class Fukuten
{
string MyName { get; } = nameof(Fukuten);
string Method { get; } = nameof(Fukuten.Say);
} 25
その他のC# 6.0の機能
•インデックス初期化子
•例外フィルター
26
C# 6.0の機能を
使ってますか?
27
New Features in C# 7.0
実用性の“高そう”な機能を紹介
28
switch文のcase節
•パターンマッチング
•型による比較
•キャストした値を変数に格納
•これまで)リテラル値での比較のみ
29
30
class Person
{
public string Name { get; set; }
}
class Student : Person
{
public int Age { get; set; }
}
31
void Switch(object o)
{
switch (o)
{
case true:
Console.WriteLine("o is boolean."); break;
case 1:
Console.WriteLine("o is number."); break;
case Student s when (s.Age == 30):
Console.WriteLine("o is 30 years old."); break;
case Student s:
Console.WriteLine("o is Student."); break;
case Person p when (p.Name == "yuta"):
Console.WriteLine("o is Yuta."); break;
case Person p:
Console.WriteLine("o is Person."); break;
default:
Console.WriteLine("o is something."); break;
}
}
ローカル関数
•関数内でのみ使用可能な関数
•これまで)Action / Func / Predicate
型などで実現
32
void LocalFunction()
{
void log(string m) => Console.WriteLine(m);
log("hoge");
// 以前の書き方
Action<string> log =
(m) => Console.WriteLine(m);
}
個人的な感想
•C# 6.0の実用性を高めた機能が多い
• 使いこなせばコード量の圧縮となる
•C# 7.0は「かゆい所に手が届く」機
能が提供された
33
ありがとうございました
34

復習も兼ねて!C#6.0-7.0

Editor's Notes

  • #11 3/7にVisual Studio 2017が正式リリースされました。 今年でVisual Studioは20周年を迎えたそうです。 まずこれまでのVisual Studioを振り返ってみましょう。
  • #14 VSファミリーのアイコンセットも新しくなりました。左から順に、 ・これまでのVSのアイコン ・VS2017のアイコン ・Visual Studio Team Serviecsのアイコン ・Visual Studio Blendのアイコン ・Visual Studio Mobile Centerのアイコン
  • #15 最小構成で600MBとかなり圧縮されました。そのためVSのインストールが数分で終わるようになりました。 またインストール構成もワークロードに合わせて設定できるようになりました。
  • #16 VS2015の頃から充実していましたが、VS2017で更に充実したようです。 この他にもXAMLツールや解析系ツールも提供されています。
  • #17 最小構成で600MBとかなり圧縮されました。そのためVSのインストールが数分で終わるようになりました。 またインストール構成もワークロードに合わせて設定できるようになりました。
  • #18 ということでC#7.0の新機能について紹介します。
  • #20 前バージョン「6.0」で追加された機能をおさらいしましょう。
  • #29 ということでC#7.0の新機能について紹介します。