大人の基礎c#【niigat.net 2015-10】
TRANSCRIPT
大人の基礎 C#Microsoft MVP for .NET ( C# ) Since 2003Mitsuhito Ishino
NIIGATA.NET
自己紹介 名前
石野 光仁 @AILight
所属 Microsoft MVP for C# 2003 - 2014 Microsoft MVP for .NET 2015 – コミュニティ
▪ Niigata.NET▪ アイライト主催
▪ http://www.ailight.jp
セッションの目的とゴールSession Objectives and Takeaways
セッションの目的 プログラミングの基礎を学ぶ C# 、大人の基礎を学ぶ
セッションのゴール 明日から実践できる知識を得る C# を使って、ステップアップできるようになる
ステップアップ プログラミングプログラミングの上達ためには、 何をしたらいい? 何が必要?
NIIGATA.NET
ステップアップに大切な3つの事1. 上手くなりたいと“強く“思うこと2. うまくて、安くて、速い を目指す3. 多読
上手くなりたいと“強く“思うこと 考えることが大切
日々の繰り返しでは、上達はしない 意識すると、少しずつ改善する 下手な苦手な部分が見えてくる
▪ 良くない部分を改善させるのが上達への近道
得意 苦手完璧
うまくて、安くて、速い を目指す うまい
バグがない 再利用する価値がある
安い コードが“短く”書かれている メモリの使用量が少ない短い = メモリ使用量が少ない = 安い
速い 実行速度
多読 プログラムをとにかく読む
うまくなりたいと意識している事が大切▪ 自分の苦手な部分に注目する▪ プログラムのバランスに注目する
機能でプログラムを見る▪ 一行を読めても意味がない
▪ 前処理▪ 本処理▪ 後処理
前処理本処理後処理
ループ
まとめ:ステップアップに大切な3つの事1. 上手くなりたいと“強く“思うこと2. うまくて、安くて、速い を目指す3. 多読 プログラムを書かなければ
バグが生まれない メモリを使わない CPU を使わない(最速)
繰り返す
ステップアップ C#C# で、ステップアップ
NIIGATA.NET
C#ステップアップに大切な3つの事1. 言語仕様を学ぶ2. ランタイムを学ぶ3. 短く書くようにする
C# とは? マイクロソフトが開発したマルチパラダイムプログラミング言語。強い型付け、命令型、宣言型、手続き型、関数型、ジェネリック、オブジェクト指向の要素を持つ 設計者:アンダース・ヘルスバーグ
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
Visual Studio 2015
iOS 、 Android など各種モバイル端末に向けクロスプラットフォーム開発機能の強化 .NET Framework 4.6 、 Windows 10 対応 C# 6 、 Visual Basic 14 、 TypeScript 1.5 ASP.NET 5 対応 Roslyn 採用などによる言語解析や IDE サポートの改善
C# のリファレンス まず、読みましょう!! どこで読めるのか?
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC#\Specifications\1041
CSharp Language Specification.docx
C# 2.0ジェネリック:< T > .NET Framework に型パラメーターという概念を導入します。型パラメーターを使用すると、クラスやメソッドがクライアント コードで宣言され、インスタンス化されるまで、 1 つ以上の型の指定を遅延させるクラスとメソッドを設計できます。
C# 2.0Nullable :? null 許容型値型が表せる値か null 値を持つことが出来ます 例
Int : -2147483648 から 2147483647null
syntax sugar糖衣構文(とういこうぶん) プログラミング言語において、読み書きのしやすさのために導入される構文であり、既に定義されている他の構文の(人間にとってより理解しやすい)書換えとして定義されるもののことである。
C# 3.0型推論: var, default(T)
暗黙的に型指定されたローカル変数宣言では、宣言されるローカル変数の型は、その変数の初期化に使用される式から推論されます。
C# 3.0LINQ:=> ( goes to ) 統合言語クエリ (LINQ) は、強力なクエリ機能を C# 言語の構文へと拡張する、
Visual Studio 2008 で導入された機能のセットです。 LINQ には、データを照会したり更新したりするための、容易に覚えることのできる標準的なパターンが採用されており、あらゆる種類のデータ ストアをサポートするようにテクノロジを拡張できます。
C# 3.0拡張メソッド : static this
拡張メソッドを使用すると、新規の派生型の作成、再コンパイル、または元の型の変更を行うことなく既存の型にメソッドを "追加 " できます。 拡張メソッドは特別な種類の静的メソッドですが、拡張された型のインスタンス メソッドのように呼び出します。
C# 4.0dynamic
dynamic という新しい型が導入されています。 この型は静的な型ですが、 dynamic 型のオブジェクトは静的な型チェックをバイパスします。 ほとんどの場合、 object 型を使用する場合と同様に機能します。 コンパイル時には、 dynamic として型指定された要素はあらゆる操作をサポートすると見なされます。
C# 4.0名前付引数 / 省略可能な引数 名前付き引数と省略可能な引数が導入されています。 名前付き引数を使用すると、パラメーター リストのパラメーターの位置ではなく、パラメーター名に引数を関連付けることによって、特定のパラメーターの引数を指定できます。 省略可能な引数を使用すると、一部のパラメーターの引数を省略できます。
C# 5.0async / await
非同期プログラミングを使用することによって、ボトルネックとなる幾つかの部分に、全体のパフォーマンスが引きずられる事のないように改良することができます。 しかしながら、従来の非同期アプリケーションのプログラミングはその性質から、コードの記述が難しく、デバッグでは問題の再現が難しくなりがちで、またそのコードのメンテナンスも複雑になっていました。 C# では、非同期処理がより簡単に実現できます。
C# 6.0自動実装プロパティの拡張 自動実装プロパティを使用することで、プロパティ アクセサーに追加のロジックが必要ない場合は、プロパティをより簡潔に宣言できます。 C# 6 以降では、フィールドと同様に自動実装プロパティを初期化することができます。
ランタイムDisposable
Dispose パターンと呼ばれる、オブジェクトを破棄するパターンによって、オブジェクトの有効期間に順番が付けられます。 Dispose パターンは、ファイルおよびパイプ ハンドル、レジストリ ハンドル、待機ハンドル、アンマネージ メモリ ブロックのポインターなど、アンマネージ リソースにアクセスするオブジェクトでのみ使用されます。 これは、使用されていないマネージ オブジェクトの解放にはガベージ コレクターが非常に有効ですが、アンマネージ オブジェクトは解放できないためです。
ランタイムDisposable
メモリ:ClassName
public void TestMethod(){ var className = new ClassName()
className.Write()
}
ガベージコレクション
OS資源:
ガベージコレクション待ち
リソース占有
メモリ:ClassName
OS資源:
ランタイムDisposable
メモリ:ClassName
public void TestMethod(){ var className = new ClassName()
className.Write()
className.Dispose()}
ガベージコレクション
OS資源:
ガベージコレクション待ち
リソース占有 リソース解放
OS資源:
リソース占有
ランタイムSystem.Reflection
アセンブリ、モジュール、メンバー、パラメーター、およびその他のマネージ コード内のエンティティに関する情報を、そのメタデータを調べることで取得する型が含まれています。 これらの型は、イベントのフックやメソッドの呼び出しなど、読み込んだ型のインスタンスを操作する目的にも使用できます。
System.Reflection文字列でクラスを操作したいよね? よくある話として、 DB のテーブル設計で、1日~ 31 日をフィールドとして持っている場合がある
Date1, Date2, Date3, Date….., Date31
ステップアップしたその先にあるものC# を上達させるには? 何をしたらいい? 何が必要?
NIIGATA.NET
C#ステップアップしたその先にあるもの1. オブジェクト分析のトレーニング2. 手続なプログラムからのステップアップ3. 拡大解釈による破たん
オブジェクト分析のトレーニング身近なものを分析する
テレビは? エアコンは?
プログラミングでも同じ 想像できる物の設計図を書きだす作業
▪ あるべき場所に、あるべきものを書く▪ メンバ変数▪ メソッド▪ プロパティ
オブジェクト分析のトレーニングエアコン編 Class
エアコン Property
電源状態( On/Off ) 運転モード (冷房 /暖房 ) 温度( xx℃ )
Method 電源On() 電源Off () Set運転モード(冷 /暖) Set温度(xx)
手続なプログラムからのステップアップ 手続なプログラムの問題点
手順を正確に書く必要がある▪ 前処理を忘れるとバグになる(初期化ミス)▪ 順番を間違えるとバグになる
宣言なプログラムを検討する 使いたい機能を宣言する(一行プログラミング)
▪ 前処理をしない▪ 順番を入れ替えてもバグになら無い
手続なプログラムからのステップアップ手続なプログラム LinkLabel_Click
TextBox.ShowCalcDialog
TextBox_KeyDown If (e.key == Keys.F4)
▪ TextBox.ShowCalcDialog
TextBox_Leave TextBox.CloseCalcDialog
宣言なプログラム Set電卓機能
(LinkLabel, TextBox)
金額
拡大解釈による破たん 入力の条件を、無限大まで拡大する
引数の数、パラメータ数 値のサイズ ・・・なんでも
破たん状況を見て、よりベターな選択をする 状況の良い方を選ぶことで、 間違いの少ないプログラムへ
まとめC# を上達させるには? 何をしたらいい? 何が必要?
NIIGATA.NET
まとめ 向上心を忘れずに!! 短いプログラムを心がけよう!!
変数名や関数名を短くするってことではない C# を使って、ステップアップしよう!!
参考資料 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
http://www.ailight.jp
NIIGATA.NET