Download - 今からでも遅くないC#開発
今からでも遅くないC#開発HackerTackle
濱本 一慶(Hamamoto Kazunori)2015/09/26
自己紹介
濱本 一慶(はまもと かずのり)
@airish9
C#アプリケーションエンジニア
福岡生まれの福岡育ち
VB.NETやC#中心のMS勢
出没コミュニティ
Japan Azure User Group
C#勉強会福岡
本日のセッションについて
▪ C#にチョット興味ある方を対象してます
▪ これからC#を始めたい方も対象にしています
▪ Hacker Tackleでは貴重な初心者向けセッション!
▪ C#について話そうと思ってたら.NETになっていた(何を言って…ry)
そもそもC#ってどんな言語?
C#(シーシャープ)とは、マイクロソフトが開発したマルチパラダイムプログラミング言語。強い型付け、命令型、宣言型、手続き型、関数型、ジェネリック、オブジェクト指向の要素を持つ。マイクロソフトのソフトウェアフレームワークである.NET Frameworkとともに作られ、Ecma
International[1]および国際標準化機構 (ISO)[2] によって標準化されており、日本においても日本工業規格 (JIS)[3]によって採択された。
https://ja.wikipedia.org/wiki/C_Sharp
C#を語るうえで.NETは欠かせない(monoはこの際置いておきましょう)
余談ですが・・・
C♯C#正誤
正式には
C♯の歴史
C#1.0
2000年C#2.0
2004年C#3.0
2007年C#4.0
2008年C#5.0
2012年C#6.0
2015年
クラス
ジェネリクス
ラムダ式LINQ
dynamic
await/async
Roslyn
注目度は?
Google先生が言うにはJavaが断トツ人気・・・。
これからC♯を始めるには?
▪ 対象とするFrameworkのバージョンで大きく2種類
▪ .NET Core▪ VisualStudioかVisualStudioCode
▪ 従来の.NET Framework
▪ VisualStudio
C♯の利用シーン
C♯の利用シーン
Windows DesktopWindows Form Application
Windows DesktopWPF
提督業も忙しい! | grabacr.nét - http://grabacr.net/kancolleviewer
Windows Store
Windows StoreWindows Phone Application
Xamarin
https://xamarin.com/
10分間で分かった気になれるXamarin概要 - http://www.buildinsider.net/enterprise/sansanreport/0601
▪ C♯を利用したクロスプラットフォーム開発環境
▪ Android、iOS、WindowsPhoneに対応
▪ ネイティブのアプリを作成可能
Unity▪ クロスプラットフォームゲームエンジン
▪ C♯が利用可能
▪ モバイル・デスクトップ、ブラウザ、ゲーム機などの多数のプラットフォームに対応
http://unity3d.com/jp/unity
Kinect▪ センサーデバイス
▪ C♯のSDKがを利用して開発可能
Microsoft Azure▪ Microsoft社が提供するクラウドプラットフォーム
▪ Visual Studioとの親和性が高い
▪ 各サービスでC♯のSDKを利用可能
https://azure.microsoft.com/ja-jp/
これからC♯を始めるってどうよ?
▪ 近年、日の目を浴びてきた言語だと思う
▪ 利用シーンは豊富でユーザー数も多い
▪ 今から入るのはチャンス
コミュニティのご紹介
▪ コミュニティを活用して情報収集をしましょう
▪ 福岡でMicrosoft系のコミュニティ
▪ Csharp Fukuoka
▪ Japan Azure User Group Fukuoka(ふくあず)
▪ Win.tech.q
Csharp Fukuokaのご紹介
▪ 福岡でCsharpに興味がある方向けのコミュニティ
▪ 2013年5月13日に結成
▪ 過去に8回の勉強会を開催
▪ 目安は3ヶ月に1回のペースで開催
https://www.facebook.com/groups/472380036165353
Csharp Fukuokaのご紹介
https://www.facebook.com/groups/472380036165353
Japan Azure User Group Fukuokaのご紹介
▪ Azureコミュニティの福岡支部
▪ インフラやアプリエンジニアが多数参加しています
▪ 月に1回ペースで勉強会を開催
https://www.facebook.com/groups/fukuazu
NET 5 Webアプリ開発スタイル
2種類の .NET5
▪ .NET 5
▪ .NET Compiler Platform(Roslyn) によるコンパイル
▪ 新しいC#やVB.NET
▪ ASP.NET 5
▪ side-by-side 実行できる .NET(ランタイムのインストールが不要に!)
▪ Roslynによる実行時コンパイル!(しかし遅い…)
▪ MVC6、SignalR 6、EF7 etc…
ASP.NET 5
▪ Side-by-side実行による非ランタイムインストール実行
▪ Roslynによる実行時コンパイル
▪ OWIN実装によるIISに依存しないASP.NET実行環境
▪ Windows以外の開発&実行環境
https://github.com/aspnet http://aspnet.codeplex.com/
ASP.NET 5
▪ 基本的にASP.NET vNextの名称が変わっただけ
▪ MVC 6
▪ 実行時コンパイル
▪ IISを必要としないSelf Hosting
▪ VisualStudio 2015 で使用可能
▪ プロジェクトテンプレートが従来の形と大きく異なる
ASP.NET 5 のプロジェクトテンプレート
▪ 設定ファイルにjsonを使用する。
▪ global.json (プロジェクトの参照関係に使用)、project.json (プロジェクト設定)
▪ プロジェクトテンプレートにYeomanを使用する
▪ パッケージ管理にnpmとBowerを使用する
▪ タスク実行にGruntを使用する
npm、Bower、Grunt
▪ ASP.NETでは縁がなかったパッケージ管理&タスクランナー
▪ npm
▪ Node.jsで使用されているパッケージマネージャー、BowerとGruntが必要とする
▪ Bower(バウアー)
▪ フロントエンド用のパッケージマネージャー
▪ Javascriptライブラリの依存関係やバージョン管理を補助してくれる
▪ Twitter社が作ったらしい
▪ .NETerに解りやすく説明するなら、NuGetの様なもの
npm、Bower、Grunt
▪ Grunt
▪ Node.jsで動作するタスクランナー
▪ 定義ファイルで実行タスクを定義する
▪ JavaScriptの圧縮(minify)や結合
▪ altJSのコンパイル
OmniSharp
▪ 様々なエディタで.NETを開発できるようにするプロジェクト
▪ MacやLinuxのエディタでも開発できるようにする計画
▪ Sublime Text
▪ Atom
▪ Emacs
▪ Vim
http://www.omnisharp.net/
C♯6.0のご紹介
C♯の歴史
C#1.0
2000年C#2.0
2004年C#3.0
2007年C#4.0
2008年C#5.0
2012年C#6.0
2015年
クラス
ジェネリクス
ラムダ式LINQ
dynamic
await/async
Roslyn
Roslynとは?
.NET Frameworkの次世代コンパイラプラットフォーム
Compiler APIs
• コンパイラ
Feature APIs
• Code Fixやリファクタリング等
Workspace APIs
• プロジェクトファイルや参照関係
C♯6.0
Visual Studio 2015で使用可能(現在はRTM)
実はVisulaBasicも便利になります
Roslyn ≒ C#6.0
大きな変更はなく、細かい修正が多い
C♯6.0の実装状況Feature Example
Auto-property initializers public int X { get; set; } = x;
Getter-only auto-properties public int Y { get; } = y;
Ctor assignment to getter-only autoprops Y = 15
Parameterless struct ctors Structure S : Sub New() : End Sub : End Structure
Using static members using System.Console; … Write(4);
Dictionary initializer new JObject { ["x"] = 3, ["y"] = 7 }
Await in catch/finally try … catch { await … } finally { await … }
Exception filters catch(E e) if (e.Count > 5) { … }
Expression-bodied members public double Dist => Sqrt(X * X + Y * Y);
Null propagation customer?.Orders?[5]?.$price
String interpolation $"{p.First} {p.Last} is {p.Age} years old."
nameof operator string s = nameof(Console.Write);
#pragma #Disable Warning BC40008
Extension Add in collection initializers
Improved overload resolution
http://roslyn.codeplex.com/wikipage?title=Language%20feature%20status&referringTitle=Home
Auto-property initializers自動実装プロパティの初期化がコンストラクタで可能になりました!
class Person{public int Age { get;set; }
public Person(){Age = 20;
}}
Before
class Person{public int Age { get;set; } = 20;
}
Next
Getter-only auto-propertiesGetterのみの自動実装プロパティの初期化もできます
class Person{
public int Age { get { return this._age; } }private int _age = 20;
}
Before
class Person{
public int Age { get; } = 20;}
Next
Using static members静的クラスの静的メソッドは省略可能になります
class Person{public void Say(){System.Console.WriteLine("Name is " + this.Name);
}}
Before
using System.Console;
class Person{public void Say(){Console.WriteLine("Name is " + this.Name);
}}
After
Await in catch/finallyCatch句とFinally句でawaitが使用できようになりました
try{
//HodeHoge}catch (Exception e){
await Task.Delay(2000);}
After
Exception exception = null;try{
//HodeHoge}catch (Exception e){
exception = e;}if (exception != null)
await Task.Delay(2000);
Before
Exception filtersCatch句に条件式を付与する事ができるようになりました
try{
//HogeHoge}catch (Exception e)
if (e.Data.Count > 10){
//例外処理}
After
try{
//HogeHoge}catch (Exception e) {
if (e.Data.Count > 10){//例外処理
}}
Before
Null propagationnullチェックをシンプルに記述できます
public int? GetNameLength(Person person){
if (person == null) return null;if (person.Name == null) return null;return person.Name.Length;
}
Before
public int? GetNameLength(Person person){
return person?.Name?.Length;}
After
nameof operatorメンバや変数の名前を返す演算子
class Person{
public string Name { get; set; }
public Person(string name){if (string.IsNullOrEmpty(name))
throw new ArgumentException("name" + " is NullOrEmpty");this.Name = name;
}}
Before
文字列指定
nameof operatorメンバや変数の名前を返す演算子
public string Name { get; set; }
public Person(string name){
if (string.IsNullOrEmpty(name))throw new ArgumentException(nameof(name) + "is NullOrEmpty");
this.Name = name;}
After
nameof演算子でタイプセーフ
String interpolation文字列補完をする際に変数を直接指定できるようになりました
Console.WriteLine("{0}×{1:2D}={2:0.0}", a, b, result);
Before
int a = 3;
int b = 4;
int result = a * b;
Console.WriteLine($"{a}×{b:2D}={result:0.0}");
After
ご清聴ありがとうございました