SlideShare une entreprise Scribd logo
1  sur  38
Télécharger pour lire hors ligne
.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
3-1. null許容型(1)
null許容型とは?

.NETでは数値型や日付型のように、null(VBでは
Nothing)の代入できないデータ型がある

このnullの代入できない型にnullが代入できる(か
のように扱う)ようにするのがnull許容型
              (※.NET Framework2.0以降)
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 //2
 number = null
 if (number == null){ //true
     number = number + 1 //null
 }
3-1. null許容型(6)
null許容型を使う(VB.NET)

 Dim number As Integer? = 1;
 number = number + 1 //2
 number = Nothing
 If number Is Nothing Then //True
     number = number + 1 //Nothing
 End 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
3-3. LINQ(1)
LINQとは?
正式名称は「統合言語クエリ」
データの集合(データソース)から特定のデータを抜
き出したり、加工したりするための仕組み
コレクションの操作やデータベース問い合わせに
使用できる
               (※.NET Framework3.5以降)
3-3. LINQ(2)
LINQの対象
配列やジェネリックコレクションでも使用できる
他にも、
 ・XML用の「LINQ to XML」
 ・DB用の「ADO.NET Entity Framework」
などがある
3-3. LINQ(3)
LINQの特徴(1)

LINQの機能は、対象となるオブジェクトのメソッド
として提供されている
また、メソッドは統一的に作られているので、異な
るデータソースを同じ様に扱うことが出来る
3-3. LINQ(4)
LINQの特徴(2)
従来はループを用いて書く必要があった処理を、
メソッド1つで実現できる
LINQのメソッドの例:
 ・Where():特定の条件を満たす要素を抽出する
 ・All():全ての要素が特定の条件を満たすかどうか調べる
 ・Select():各要素を別の値に加工する
3-3. LINQ(5)
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(6)
補足:条件の記述について(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(7)
補足:条件の記述について(2)

 IEnumerable<int> query
                  = list.Where(isEven);
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 bool isEven(int x){
   return x % 2 == 0
 }
3-3. LINQ(8)
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 list
    Console.WriteLine("{0}", number ) '2 ,4, 6
 Next
3-3. LINQ(9)
クエリ式

言語が対応していれば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(10)
LINQの注意点(1)

・LINQの処理は遅延実行される
 →抽出や加工の結果が実際に必要になった
   タイミングで処理される(foreachで使用した時など)
3-3. LINQ(11)
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, 6
 foreach (var number in query )
     Console.WriteLine("{0}", number) //0, 2 ,4, 6
3-3. LINQ(12)
LINQの注意点(2)

・クエリ式はSQLと互換性があるわけではない
 →あくまでそれっぽく書けるだけ
   特にJOINやサブクエリ(みたいな書き方)は
   SQLよりややこしい(主観)
4. さいごに(1)

今回ご紹介した機能やその使い方は、
.NET Frameworkの本当に極一部、取っ掛かりの
部分にすぎません
(LINQに関しては特に!)
便利な機能はたくさん他にも沢山あります!
4. さいごに(2)
困った時はとにかく・・・


MSDNライブラリを読みましょう!!
http://msdn.microsoft.com/library/default.aspx

・日本語!
・全バージョンをカバー!
・豊富なサンプル!
.NET Framework入門



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

Contenu connexe

Tendances

関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
並行プログラミングと継続モナド
並行プログラミングと継続モナド並行プログラミングと継続モナド
並行プログラミングと継続モナドKousuke Ruichi
 
Control.Arrow
Control.ArrowControl.Arrow
Control.Arrowharu haru
 
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたKazuyuki TAKASE
 
Python勉強会4-制御構文とパッケージ
Python勉強会4-制御構文とパッケージPython勉強会4-制御構文とパッケージ
Python勉強会4-制御構文とパッケージ理 小林
 
[アルゴリズムイントロダクション勉強会] ハッシュ
[アルゴリズムイントロダクション勉強会] ハッシュ[アルゴリズムイントロダクション勉強会] ハッシュ
[アルゴリズムイントロダクション勉強会] ハッシュRei Takami
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCamlHaruka Oikawa
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミングOuka Yuka
 
Real World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみたReal World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみたblackenedgold
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門Kimikazu Kato
 
プログラミング講座
プログラミング講座プログラミング講座
プログラミング講座Yu Yu
 
Goをカンストさせる話
Goをカンストさせる話Goをカンストさせる話
Goをカンストさせる話Moriyoshi Koizumi
 
【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream API【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream APIdcomsolution
 
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けープログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けーTanUkkii
 
すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-Hiromasa Ohashi
 
Haskell勉強会 in ie
Haskell勉強会 in ieHaskell勉強会 in ie
Haskell勉強会 in iemaeken2010
 

Tendances (20)

関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
並行プログラミングと継続モナド
並行プログラミングと継続モナド並行プログラミングと継続モナド
並行プログラミングと継続モナド
 
Control.Arrow
Control.ArrowControl.Arrow
Control.Arrow
 
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみた
 
Python勉強会4-制御構文とパッケージ
Python勉強会4-制御構文とパッケージPython勉強会4-制御構文とパッケージ
Python勉強会4-制御構文とパッケージ
 
[アルゴリズムイントロダクション勉強会] ハッシュ
[アルゴリズムイントロダクション勉強会] ハッシュ[アルゴリズムイントロダクション勉強会] ハッシュ
[アルゴリズムイントロダクション勉強会] ハッシュ
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
 
Emcjp item21
Emcjp item21Emcjp item21
Emcjp item21
 
Haxe vs Unicode
Haxe vs UnicodeHaxe vs Unicode
Haxe vs Unicode
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
 
Real World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみたReal World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみた
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
 
プログラミング講座
プログラミング講座プログラミング講座
プログラミング講座
 
Goをカンストさせる話
Goをカンストさせる話Goをカンストさせる話
Goをカンストさせる話
 
MP in Haskell
MP in HaskellMP in Haskell
MP in Haskell
 
【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream API【java8 勉強会】 怖くない!ラムダ式, Stream API
【java8 勉強会】 怖くない!ラムダ式, Stream API
 
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けープログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
 
すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-
 
Yokohama6 epi
Yokohama6 epiYokohama6 epi
Yokohama6 epi
 
Haskell勉強会 in ie
Haskell勉強会 in ieHaskell勉強会 in ie
Haskell勉強会 in ie
 

Similaire à VS勉強会 .NET Framework 入門

Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Naoki Aoyama
 
ジェネリクスの基礎と クラス設計への応用
ジェネリクスの基礎とクラス設計への応用ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎と クラス設計への応用nagise
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio CodeAkira Inoue
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)Masahiro Hayashi
 
from old Java to modern Java
from old Java to modern Javafrom old Java to modern Java
from old Java to modern Java心 谷本
 
本当にあった怖い話し (やきに駆動 2.0)
本当にあった怖い話し (やきに駆動 2.0)本当にあった怖い話し (やきに駆動 2.0)
本当にあった怖い話し (やきに駆動 2.0)Oda Shinsuke
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介fukuoka.ex
 
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLLINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLShinichiAoyagi
 
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Prunus 1350
 
KETpic できれいな図を書こう
KETpic できれいな図を書こうKETpic できれいな図を書こう
KETpic できれいな図を書こうYoshitomo Akimoto
 
Python standard 2022 Spring
Python standard 2022 SpringPython standard 2022 Spring
Python standard 2022 Springanyakichi
 
Javaセキュアコーディングセミナー東京第3回演習の解説
Javaセキュアコーディングセミナー東京第3回演習の解説Javaセキュアコーディングセミナー東京第3回演習の解説
Javaセキュアコーディングセミナー東京第3回演習の解説JPCERT Coordination Center
 

Similaire à VS勉強会 .NET Framework 入門 (20)

Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
ジェネリクスの基礎と クラス設計への応用
ジェネリクスの基礎とクラス設計への応用ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎と クラス設計への応用
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio Code
 
20010901
2001090120010901
20010901
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)
 
Ll xcode
Ll xcodeLl xcode
Ll xcode
 
from old Java to modern Java
from old Java to modern Javafrom old Java to modern Java
from old Java to modern Java
 
本当にあった怖い話し (やきに駆動 2.0)
本当にあった怖い話し (やきに駆動 2.0)本当にあった怖い話し (やきに駆動 2.0)
本当にあった怖い話し (やきに駆動 2.0)
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
Refactoring point of Kotlin application
Refactoring point of Kotlin applicationRefactoring point of Kotlin application
Refactoring point of Kotlin application
 
やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介
 
LINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XMLLINQ 概要 + 結構便利な LINQ to XML
LINQ 概要 + 結構便利な LINQ to XML
 
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章
 
KETpic できれいな図を書こう
KETpic できれいな図を書こうKETpic できれいな図を書こう
KETpic できれいな図を書こう
 
Python standard 2022 Spring
Python standard 2022 SpringPython standard 2022 Spring
Python standard 2022 Spring
 
LINQ概要
LINQ概要LINQ概要
LINQ概要
 
Javaセキュアコーディングセミナー東京第3回演習の解説
Javaセキュアコーディングセミナー東京第3回演習の解説Javaセキュアコーディングセミナー東京第3回演習の解説
Javaセキュアコーディングセミナー東京第3回演習の解説
 

VS勉強会 .NET Framework 入門