今からでも遅くないC#開発

57
今からでも遅くないC#開発 HackerTackle 濱本 一慶(Hamamoto Kazunori) 2015/09/26

Transcript of 今からでも遅くない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

ご清聴ありがとうございました