Upload
kamukiriri
View
3.068
Download
4
Embed Size (px)
DESCRIPTION
2013/03/09 第1回Visual Studio 勉強会
Citation preview
.NET Framework入門
2013/03/09 Visual Studio勉強会
@kamukiriri
目次
0. 自己紹介
1. はじめに
2. .NET Frameworkって?
3. 覚えておくと便利な機能
4. さいごに
0. 自己紹介
HN: kamu(@kamukiriri)
仕事:元.NET系業務システム開発者
現iOSアプリ開発者
プログラミング暦:
C#, VB.NET, Objective-C, Javascript,
PHP, VB6, VBA, VBS, etc...
1. はじめに(1)
この発表の内容は、「.NET Framework入門」
ですが、.NET Frameworkの使い方を具体的に
説明する為に、以下の言語を例として使用します
・Visual C# (以後C#)・Visual Basic.NET (以後VB.NET)
1. はじめに(2)
その為、C++/CLIをはじめとする他の.NET系言語
では事情が異なる内容も含まれているかもしれません
もしそういう事や他の間違いに気付かれた方は、
是非、質疑応答の際などに教えてください!
2. .NET Frameworkって?(1)
Visual Studioのメインターゲットである
C#やVB.NET等の言語で作られたプログ
ラムの実行環境であり開発環境
→VSでの開発に必要不可欠な存在
2. .NET Frameworkって?(2)
大きな特徴
・どの言語も同じ実行環境で動く
・開発には基本クラスライブラリ (BCL)を用いる
(=プログラミングのための部品の集合)
・言語間に互換性がある
(データ型が同じ、C#で作ったクラスをVB.NETで使える等)
2. .NET Frameworkって?(3)
つまり・・・
C#で開発する事も、VB.NETで開発する
事も、.NET Framework(のBCL)で開発
していると言う意味では同じ事
2. .NET Frameworkって?(4)
「VBでxxしたいけどサンプルないなあ」
→「C#ならあった!」
「VBのあの機能をC#でも使えたらなあ」
→「C#でも使えた!」
・・・という事が結構あります
3. 覚えておくと便利な機能
独断と偏見で選んだ重要機能たち
3-1. null許容型
3-2. ジェネリック コレクション
3-3. LINQ
null許容型とは?
.NETでは数値型や日付型のように、null(VBでは
Nothing)の代入できないデータ型がある
このnullの代入できない型にnullが代入できる(か
のように扱う)ようにするのがnull許容型
(※.NET Framework2.0以降)
3-1. null許容型(1)
3-1. null許容型(2)
補足:nullの入らない型
.NETのデータ型(変数の型)は、以下の2種類に大
別することができる
・値型 :数値、日付など。
実体を保持し、nullが入らない。
・参照型:文字列、GUIコントロールなど。
参照を保持し、nullが入る。
3-1. null許容型(3)
null許容型を使う主な場面
外部から取得したデータを変数に格納したいが、必ず値が取得できるとは限らないとき
・ユーザーに入力してもらう画面項目が省略可能な場合
・データベース上のnull許可項目から値を取得する場合
3-1. null許容型(4)
null許容型を宣言する
C#:int? number;Nullable<int> number;
VB.NET:Dim number As Integer? 'VB2008以降
Dim number As Nullable(Of Integer)
3-1. null許容型(5)
null許容型を使う(C#)
int? number = 1;number = number + 1 //2number = nullif (number == null){ //true
number = number + 1 //null}
3-1. null許容型(6)
null許容型を使う(VB.NET)
Dim number As Integer? = 1;number = number + 1 //2number = NothingIf number Is Nothing Then //True
number = number + 1 //NothingEnd If
3-1. null許容型(7)
null許容型の注意点
・紹介した使い方は言語のサポートありきの構文
→純粋にNullable構造体の機能だけで処理を
書くのは少し面倒
・あくまで元々の型(数値や日付)とは別の型
→代入の際はキャストで変換するか、
Valueプロパティで元々の値を取得する
3-2. ジェネリックコレクション(1)
ジェネリックコレクションとは?(1)
なんからのコレクション(=値の集合)を表現する場
合、よく使われるのが配列変数
しかし、(C#やVBの)配列変数は固定長なので時と
して不便・大き目の配列にすると、有効な値の範囲を管理するのが手間・必要なサイズが増える度に作り直すとパフォーマンスが低下
3-2. ジェネリックコレクション(2)
ジェネリックコレクションとは?(2)
そこで、.NET Framework 1.1以前では、可変長な
コレクションとして、ArrayListなどが使われていた
しかし、ArrayListはObject型でしか要素を扱えず、
やはり不便だった・値を取得する際に毎回キャストする手間がかかる・何でもかんでも入るのでバグの発生や保守性低下の恐れ
3-2. ジェネリックコレクション(3)
ジェネリックコレクションとは?(3)
そんな中.NET Framework 2.0で登場したのが、
List<T>などのジェネリックコレクション
ジェネリックコレクションは、可変長かつ実際に格納する型を明示できる→実行速度などを気にする必要がなければ、配列ではなくこち
らを使っておく方が便利
3-2. ジェネリックコレクション(4)
主なジェネリックコレクション
List<T> :配列と同じように扱える
Dictionary<T> :キーと値のペアを保存する
(いわゆる連想配列、辞書、ハッシュ)
他にもキューやスタックなどの一般的なデータ構造が揃っている
3-2. ジェネリックコレクション(5)
ジェネリックコレクションを使う(C#)
List<string> list = new List<string>();list.Add("a"); list.Add("b"); for (int i = 0; i < list.Count; i++){
Console.WriteLine("{0}", list[i].ToUpper()) //A, B
}
3-2. ジェネリックコレクション(6)
ジェネリックコレクションを使う(VB.NET)
Dim list As List(Of String) = New List(Of String)list.Add("a")list.Add("b")For i As Integer 0 To list.Count-1
Console.WriteLine("{0}", list(i).ToUpper()) //A, B
Next
LINQとは?
正式名称は「統合言語クエリ」
データの集合(データソース)から特定のデータを抜
き出したり、加工したりするための仕組み
コレクションの操作やデータベース問い合わせに使用できる
(※.NET Framework3.5以降)
3-3. LINQ(1)
LINQの対象
配列やジェネリックコレクションでも使用できる
他にも、
・XML用の「LINQ to XML」・DB用の「ADO.NET Entity Framework」
などがある
3-3. LINQ(2)
LINQの特徴(1)
LINQの機能は、対象となるオブジェクトのメソッド
として提供されている
また、メソッドは統一的に作られているので、異なるデータソースを同じ様に扱うことが出来る
3-3. LINQ(3)
LINQの特徴(2)
従来はループを用いて書く必要があった処理を、
メソッド1つで実現できる
LINQのメソッドの例:
・Where():特定の条件を満たす要素を抽出する
・All():全ての要素が特定の条件を満たすかどうか調べる
・Select():各要素を別の値に加工する
3-3. LINQ(4)
LINQを使う(C#)
List<int> list = new List<int>{1, 2, 3, 4, 5, 6};IEnumerable<int> query
= list.Where(x=>x%2 == 0);foreach (var number in query ){
Console.WriteLine("{0}", number) //2 ,4, 6}
3-3. LINQ(5)
補足:条件の記述について(1)
List<int> list = new List<int>{1, 2, 3, 4, 5, 6};IEnumerable<int> query
= list.Where(x=>x%2 == 0);foreach (var number in query ){
Console.WriteLine("{0}", number) //2 ,4, 6}
3-3. LINQ(6)
補足:条件の記述について(2)
IEnumerable<int> query = list.Where(isEven);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~bool isEven(int x){
return x % 2 == 0}
3-3. LINQ(7)
LINQを使う(VB.NET)
Dim list As List(Of Integer) = New List(Of Integer) From {1, 2, 3, 4, 5, 6};
IEnumerable(Of Integer) query= list.Where(Function(x)=>x mod 2 = 0);
For Each number As Integer In listConsole.WriteLine("{0}", number ) '2 ,4, 6
Next
3-3. LINQ(8)
クエリ式
言語が対応していればSQLライクに記述できる
C#:List<int> list = new List<int>{1, 2, 3, 4, 5, 6};var query = from number in list where number % 2 == 0 select number; //2 ,4, 6
3-3. LINQ(9)
LINQの注意点(1)
・LINQの処理は遅延実行される
→抽出や加工の結果が実際に必要になった
タイミングで処理される(foreachで使用した時など)
3-3. LINQ(10)
LINQの注意点(1)
List<int> list = new List<int>{1, 2, 3, 4, 5, 6};IEnumerable<int> query
= list.Where(x=>x%2 == 0);list[0] = 0; //0, 2, 3, 4, 5, 6foreach (var number in query )
Console.WriteLine("{0}", number) //0, 2 ,4, 6
3-3. LINQ(11)
LINQの注意点(2)
・クエリ式はSQLと互換性があるわけではない
→あくまでそれっぽく書けるだけ
特にJOINやサブクエリ(みたいな書き方)は
SQLよりややこしい(主観)
3-3. LINQ(12)
4. さいごに(1)
今回ご紹介した機能やその使い方は、
.NET Frameworkの本当に極一部、取っ掛かりの
部分にすぎません
(LINQに関しては特に!)
便利な機能はたくさん他にも沢山あります!
4. さいごに(2)
困った時はとにかく・・・
MSDNライブラリを読みましょう!!
http://msdn.microsoft.com/library/default.aspx
・日本語!
・全バージョンをカバー!
・豊富なサンプル!
.NET Framework入門
ご清聴ありがとうございました