大人の基礎c#【niigat.net 2015-10】

41
大大大大大 C# Microsoft MVP for .NET C# Since 2003 Mitsuhito Ishino NIIGATA.NET

Upload: mitsuhito-ishino

Post on 14-Apr-2017

3.249 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 大人の基礎C#【Niigat.NET 2015-10】

大人の基礎 C#Microsoft MVP for .NET ( C# ) Since 2003Mitsuhito Ishino

NIIGATA.NET

Page 2: 大人の基礎C#【Niigat.NET 2015-10】

自己紹介 名前

石野 光仁 @AILight

所属 Microsoft MVP for C#   2003 - 2014 Microsoft MVP for .NET   2015 – コミュニティ

▪ Niigata.NET▪ アイライト主催

▪ http://www.ailight.jp

Page 3: 大人の基礎C#【Niigat.NET 2015-10】

セッションの目的とゴールSession Objectives and Takeaways

セッションの目的 プログラミングの基礎を学ぶ C# 、大人の基礎を学ぶ

セッションのゴール 明日から実践できる知識を得る C# を使って、ステップアップできるようになる

Page 4: 大人の基礎C#【Niigat.NET 2015-10】

ステップアップ プログラミングプログラミングの上達ためには、 何をしたらいい? 何が必要?

NIIGATA.NET

Page 5: 大人の基礎C#【Niigat.NET 2015-10】

ステップアップに大切な3つの事1. 上手くなりたいと“強く“思うこと2. うまくて、安くて、速い を目指す3. 多読

Page 6: 大人の基礎C#【Niigat.NET 2015-10】

上手くなりたいと“強く“思うこと 考えることが大切

日々の繰り返しでは、上達はしない 意識すると、少しずつ改善する 下手な苦手な部分が見えてくる

▪ 良くない部分を改善させるのが上達への近道

得意 苦手完璧

Page 7: 大人の基礎C#【Niigat.NET 2015-10】

うまくて、安くて、速い を目指す うまい

バグがない 再利用する価値がある

安い コードが“短く”書かれている メモリの使用量が少ない短い = メモリ使用量が少ない = 安い

速い 実行速度

Page 8: 大人の基礎C#【Niigat.NET 2015-10】

多読 プログラムをとにかく読む

うまくなりたいと意識している事が大切▪ 自分の苦手な部分に注目する▪ プログラムのバランスに注目する

機能でプログラムを見る▪ 一行を読めても意味がない

▪ 前処理▪ 本処理▪ 後処理

前処理本処理後処理

ループ

Page 9: 大人の基礎C#【Niigat.NET 2015-10】

まとめ:ステップアップに大切な3つの事1. 上手くなりたいと“強く“思うこと2. うまくて、安くて、速い を目指す3. 多読 プログラムを書かなければ

バグが生まれない メモリを使わない CPU を使わない(最速)

繰り返す

Page 10: 大人の基礎C#【Niigat.NET 2015-10】

ステップアップ C#C# で、ステップアップ

NIIGATA.NET

Page 11: 大人の基礎C#【Niigat.NET 2015-10】

C#ステップアップに大切な3つの事1. 言語仕様を学ぶ2. ランタイムを学ぶ3. 短く書くようにする

Page 12: 大人の基礎C#【Niigat.NET 2015-10】

C# とは? マイクロソフトが開発したマルチパラダイムプログラミング言語。強い型付け、命令型、宣言型、手続き型、関数型、ジェネリック、オブジェクト指向の要素を持つ 設計者:アンダース・ヘルスバーグ

Page 13: 大人の基礎C#【Niigat.NET 2015-10】

C# の歴史Visual Studio .NET Framework C#Visual Studio .NET (2002)

.NET Framework 1.0 1.0

Visual Studio .NET 2003 .NET Framework 1.1 1.2

Visual Studio 2005 .NET Framework 2.0 2.0 :ジェネリック、 Nullable

Visual Studio 2008 .NET Framework 3.0.NET Framework 3.5

3.0 : LINQ 、型推論 、   拡張メソッド

Visual Studio 2010 .NET Framework 4.0 4.0 : dynamic   名前付引数

Visual Studio 2012 .NET Framework 4.5 5.0 : async/awaitVisual Studio 2013 .NET Framework 4.5.1 6.0 :自動プロパティの

拡張【 .NET Framework のバージョンを整理する】http://www.atmarkit.co.jp/ait/articles/1211/16/news093.html

Page 14: 大人の基礎C#【Niigat.NET 2015-10】

Visual Studio 2015

iOS 、 Android など各種モバイル端末に向けクロスプラットフォーム開発機能の強化 .NET Framework 4.6 、 Windows 10 対応 C# 6 、 Visual Basic 14 、 TypeScript 1.5 ASP.NET 5 対応 Roslyn 採用などによる言語解析や IDE サポートの改善

Page 15: 大人の基礎C#【Niigat.NET 2015-10】

C# のリファレンス まず、読みましょう!! どこで読めるのか?

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC#\Specifications\1041

CSharp Language Specification.docx

Page 16: 大人の基礎C#【Niigat.NET 2015-10】

C# 2.0ジェネリック:< T > .NET Framework に型パラメーターという概念を導入します。型パラメーターを使用すると、クラスやメソッドがクライアント コードで宣言され、インスタンス化されるまで、 1 つ以上の型の指定を遅延させるクラスとメソッドを設計できます。

Page 17: 大人の基礎C#【Niigat.NET 2015-10】

C# 2.0Nullable :? null 許容型値型が表せる値か null 値を持つことが出来ます 例

Int : -2147483648 から 2147483647null

Page 18: 大人の基礎C#【Niigat.NET 2015-10】

syntax sugar糖衣構文(とういこうぶん) プログラミング言語において、読み書きのしやすさのために導入される構文であり、既に定義されている他の構文の(人間にとってより理解しやすい)書換えとして定義されるもののことである。

Page 19: 大人の基礎C#【Niigat.NET 2015-10】

C# 3.0型推論: var, default(T)

暗黙的に型指定されたローカル変数宣言では、宣言されるローカル変数の型は、その変数の初期化に使用される式から推論されます。

Page 20: 大人の基礎C#【Niigat.NET 2015-10】

C# 3.0LINQ:=> ( goes to ) 統合言語クエリ (LINQ) は、強力なクエリ機能を C# 言語の構文へと拡張する、

Visual Studio 2008 で導入された機能のセットです。 LINQ には、データを照会したり更新したりするための、容易に覚えることのできる標準的なパターンが採用されており、あらゆる種類のデータ ストアをサポートするようにテクノロジを拡張できます。

Page 21: 大人の基礎C#【Niigat.NET 2015-10】

C# 3.0拡張メソッド : static this

拡張メソッドを使用すると、新規の派生型の作成、再コンパイル、または元の型の変更を行うことなく既存の型にメソッドを "追加 " できます。 拡張メソッドは特別な種類の静的メソッドですが、拡張された型のインスタンス メソッドのように呼び出します。

Page 22: 大人の基礎C#【Niigat.NET 2015-10】

C# 4.0dynamic

dynamic という新しい型が導入されています。 この型は静的な型ですが、 dynamic 型のオブジェクトは静的な型チェックをバイパスします。 ほとんどの場合、 object 型を使用する場合と同様に機能します。 コンパイル時には、 dynamic として型指定された要素はあらゆる操作をサポートすると見なされます。

Page 23: 大人の基礎C#【Niigat.NET 2015-10】

C# 4.0名前付引数 / 省略可能な引数 名前付き引数と省略可能な引数が導入されています。 名前付き引数を使用すると、パラメーター リストのパラメーターの位置ではなく、パラメーター名に引数を関連付けることによって、特定のパラメーターの引数を指定できます。 省略可能な引数を使用すると、一部のパラメーターの引数を省略できます。

Page 24: 大人の基礎C#【Niigat.NET 2015-10】

C# 5.0async / await

非同期プログラミングを使用することによって、ボトルネックとなる幾つかの部分に、全体のパフォーマンスが引きずられる事のないように改良することができます。 しかしながら、従来の非同期アプリケーションのプログラミングはその性質から、コードの記述が難しく、デバッグでは問題の再現が難しくなりがちで、またそのコードのメンテナンスも複雑になっていました。 C# では、非同期処理がより簡単に実現できます。

Page 25: 大人の基礎C#【Niigat.NET 2015-10】

C# 6.0自動実装プロパティの拡張 自動実装プロパティを使用することで、プロパティ アクセサーに追加のロジックが必要ない場合は、プロパティをより簡潔に宣言できます。 C# 6 以降では、フィールドと同様に自動実装プロパティを初期化することができます。

Page 26: 大人の基礎C#【Niigat.NET 2015-10】

ランタイムDisposable

Dispose パターンと呼ばれる、オブジェクトを破棄するパターンによって、オブジェクトの有効期間に順番が付けられます。 Dispose パターンは、ファイルおよびパイプ ハンドル、レジストリ ハンドル、待機ハンドル、アンマネージ メモリ ブロックのポインターなど、アンマネージ リソースにアクセスするオブジェクトでのみ使用されます。 これは、使用されていないマネージ オブジェクトの解放にはガベージ コレクターが非常に有効ですが、アンマネージ オブジェクトは解放できないためです。

Page 27: 大人の基礎C#【Niigat.NET 2015-10】

ランタイムDisposable

メモリ:ClassName

public void TestMethod(){ var className = new ClassName()

className.Write()

}

ガベージコレクション

OS資源:

ガベージコレクション待ち

リソース占有

メモリ:ClassName

OS資源:

Page 28: 大人の基礎C#【Niigat.NET 2015-10】

ランタイムDisposable

メモリ:ClassName

public void TestMethod(){ var className = new ClassName()

className.Write()

className.Dispose()}

ガベージコレクション

OS資源:

ガベージコレクション待ち

リソース占有 リソース解放

OS資源:

リソース占有

Page 29: 大人の基礎C#【Niigat.NET 2015-10】

ランタイムSystem.Reflection

アセンブリ、モジュール、メンバー、パラメーター、およびその他のマネージ コード内のエンティティに関する情報を、そのメタデータを調べることで取得する型が含まれています。 これらの型は、イベントのフックやメソッドの呼び出しなど、読み込んだ型のインスタンスを操作する目的にも使用できます。

Page 30: 大人の基礎C#【Niigat.NET 2015-10】

System.Reflection文字列でクラスを操作したいよね? よくある話として、 DB のテーブル設計で、1日~ 31 日をフィールドとして持っている場合がある

Date1, Date2, Date3, Date….., Date31

Page 31: 大人の基礎C#【Niigat.NET 2015-10】

ステップアップしたその先にあるものC# を上達させるには? 何をしたらいい? 何が必要?

NIIGATA.NET

Page 32: 大人の基礎C#【Niigat.NET 2015-10】

C#ステップアップしたその先にあるもの1. オブジェクト分析のトレーニング2. 手続なプログラムからのステップアップ3. 拡大解釈による破たん

Page 33: 大人の基礎C#【Niigat.NET 2015-10】

オブジェクト分析のトレーニング身近なものを分析する

テレビは? エアコンは?

プログラミングでも同じ 想像できる物の設計図を書きだす作業

▪ あるべき場所に、あるべきものを書く▪ メンバ変数▪ メソッド▪ プロパティ

Page 34: 大人の基礎C#【Niigat.NET 2015-10】

オブジェクト分析のトレーニングエアコン編 Class

エアコン Property

電源状態( On/Off ) 運転モード (冷房 /暖房 ) 温度( xx℃ )

Method 電源On() 電源Off () Set運転モード(冷 /暖) Set温度(xx)

Page 35: 大人の基礎C#【Niigat.NET 2015-10】

手続なプログラムからのステップアップ 手続なプログラムの問題点

手順を正確に書く必要がある▪ 前処理を忘れるとバグになる(初期化ミス)▪ 順番を間違えるとバグになる

宣言なプログラムを検討する 使いたい機能を宣言する(一行プログラミング)

▪ 前処理をしない▪ 順番を入れ替えてもバグになら無い

Page 36: 大人の基礎C#【Niigat.NET 2015-10】

手続なプログラムからのステップアップ手続なプログラム LinkLabel_Click

TextBox.ShowCalcDialog

TextBox_KeyDown If (e.key == Keys.F4)

▪ TextBox.ShowCalcDialog

TextBox_Leave TextBox.CloseCalcDialog

宣言なプログラム Set電卓機能

(LinkLabel, TextBox)

金額

Page 37: 大人の基礎C#【Niigat.NET 2015-10】

拡大解釈による破たん 入力の条件を、無限大まで拡大する

引数の数、パラメータ数 値のサイズ ・・・なんでも

破たん状況を見て、よりベターな選択をする 状況の良い方を選ぶことで、 間違いの少ないプログラムへ

Page 38: 大人の基礎C#【Niigat.NET 2015-10】

まとめC# を上達させるには? 何をしたらいい? 何が必要?

NIIGATA.NET

Page 39: 大人の基礎C#【Niigat.NET 2015-10】

まとめ 向上心を忘れずに!! 短いプログラムを心がけよう!!

変数名や関数名を短くするってことではない C# を使って、ステップアップしよう!!

Page 40: 大人の基礎C#【Niigat.NET 2015-10】

参考資料 Visual Studio

トップページhttps://www.microsoft.com/ja-jp/dev/default.aspx

Visual Studio Community  (無償)https://www.microsoft.com/ja-jp/dev/products/community.aspx

Visual Studio Code  ( mac版 無償)https://www.visualstudio.com/products/code-vs

Page 41: 大人の基礎C#【Niigat.NET 2015-10】

http://www.ailight.jp

NIIGATA.NET