ML	
  	
  Nagoya	
  
2012/05/26


                       1
自己紹介




       2
LINQってなんぞ?




             3
LINQ	
  で何が出来るか。




                   4
クエリ構文


string[]#names#=#{#"ニャル子",#"クー子",## #    #
#     #       #      "ハス太",#"シャンタッ君",#"まひろ"#};#

IEnumerable<string>#query#=#from#name#in#names#

##########################where#name.Last()#==#' '#

##########################select#name;#

foreach#(string#name#in#query){Console.WriteLine(name);}#

#
                                                            5
メソッドチェイン


  string[]#names#=#{#"ニャル子",#"クー子",#    #               #        #
#        #         #"ハス太",#"シャンタッ君",#"まひろ"#};#

 IEnumerable<string>#query2#=#names#

 ##.Where(x#=>#x.Last()#==#‘太’)#

 ##.Select(x#=>#x);#

 foreach#(string#name#in#query2)#{#Console.WriteLine(name);#}#


                                                                     6
§ 用法用量を	
  
 守って正しく	
  
 使い分けましょう。


               7
More	
  Effective…?

   § LINQ	
  で、More	
  Effective	
  って言ったらなんだろ
      う?	
  
   § Visual	
  Studio	
  11	
  、Windows	
  8もでるよね!	
  
   § Rx(Reactive	
  Extensions)	
  ?	
  
   § Ix	
  …	
  ?	
  




                                                          8
9
Rx	
  (Reactive	
  Extensions)
公式サイト
§ The	
  Reactive	
  Extensions	
  (Rx)...	
  
§ ...is	
  a	
  library	
  to	
  compose	
  asynchronous	
  and	
  event-­‐based	
  
   programs	
  	
  
§ using	
  observable	
  collections	
  and	
  LINQ-­‐style	
  query	
  
   operators.


ì  The	
  Reactive	
  Extensions	
  (Rx)...	
  

ì  非同期とイベントベースプログラムを組み合わせるライブラリ	
  

ì  観察可能なコレクションとLINQスタイルのクエリ演算子を使う

                                                                                        10
Rx	
  ってなんぞ?
§ Reactive	
  Extension	
  
§ 非同期処理と、イベント駆動プログラムを、
   observable	
  collection	
  と	
  LINQ	
  のクエリ演算子で扱
   えるようにしたMSのライブラリ。	
  
§ イベントや、時間をシーケンス(連続した列)を
   して考えたものを処理していく。	
  
§ IEnumerable<T>	
  ではなく、IObservable<T>	
  と
   IObserver<T>が使われる。	
  


                                                        11
どうして、Rx	
  があるのか
§ 次期Windows	
  OS(Windows8)では、非同期プログ
   ラミングを強制させられる。	
  
§ C#	
  5.0	
  では、async	
  /	
  await	
  構文が追加。	
  
   § かなり、簡単に非同期処理が書ける。




                                                       12
Rx	
  (IObservable<T>,	
  IObserver<T>)と	
  
今までのLINQ	
  	
  
(IEnumerable<T>,	
  IEnumrator<T>)との違い

§ IEnumerable<T>:	
  	
  元からあるコレクション(集合)を
   処理する	
  

§ IObservable<T>:	
  イベントや、時間、非同期のものを
   処理する。	
  
     §  Observable.Range	
  があるけど…	
  
§ どちらも、LINQ	
  クエリ演算子を使える。	
  



                                               13
Rx	
  のコード例
    § 今回のRxのサンプルは、よくあるマウスイベント
       の合成です。
var$mousemove$=$Observable.FromEventPattern<MouseEventArgs>(this,$"MouseMove")$
$$.Sample(TimeSpan.FromSeconds(2))$
$$.Merge(Observable.FromEventPattern<MouseEventArgs>(this,$"MouseDown"))$
$$.ObserveOnDispatcher()$
$$.Subscribe($
$$$$x$=> drawSomething(x),$
$$$$ex$=>$Console.Write(ex.Message),$
$$$$()$=>$Console.Write("end")$
$$);$
                                                                           14
Rx	
  のコード例
    § 今回のRxのサンプルは、よくあるマウスイベント
       の合成です。
var$mousemove$=$Observable.FromEventPattern<MouseEventArgs>(this,$"MouseMove")$
$$.Sample(TimeSpan.FromSeconds(2))$
               実際に合成しているメソッド
$$.Merge(Observable.FromEventPattern<MouseEventArgs>(this,$"MouseDown"))$
$$.ObserveOnDispatcher()$     UIスレッドで処理をする
$$.Subscribe($
$$$$x$=> drawSomething(x),$     シーケンスが読み込まれた際のメソッド
$$$$ex$=>$Console.Write(ex.Message),$     例外が吐かれた際に呼ばれる
$$$$()$=>$Console.Write("end")$
$$);$                                 シーケンスが読み込み終わった際に呼ばれる

                                                                           15
§ C#を使うときに、	
  
  LINQ(IEnumerable)	
  や、	
  
  Rx	
  (IObservable)	
  を使うと、	
  
  プログラミングが楽しくなりますよ!	
  




                                     16

MlnagoyaRx

  • 1.
    ML    Nagoya   2012/05/26 1
  • 2.
  • 3.
  • 4.
  • 5.
    クエリ構文 string[]#names#=#{#"ニャル子",#"クー子",## # # # # # "ハス太",#"シャンタッ君",#"まひろ"#};# IEnumerable<string>#query#=#from#name#in#names# ##########################where#name.Last()#==#' '# ##########################select#name;# foreach#(string#name#in#query){Console.WriteLine(name);}# # 5
  • 6.
    メソッドチェイン string[]#names#=#{#"ニャル子",#"クー子",# # # # # # #"ハス太",#"シャンタッ君",#"まひろ"#};# IEnumerable<string>#query2#=#names# ##.Where(x#=>#x.Last()#==#‘太’)# ##.Select(x#=>#x);# foreach#(string#name#in#query2)#{#Console.WriteLine(name);#}# 6
  • 7.
    § 用法用量を   守って正しく   使い分けましょう。 7
  • 8.
    More  Effective…? § LINQ  で、More  Effective  って言ったらなんだろ う?   § Visual  Studio  11  、Windows  8もでるよね!   § Rx(Reactive  Extensions)  ?   § Ix  …  ?   8
  • 9.
  • 10.
    Rx  (Reactive  Extensions) 公式サイト § The  Reactive  Extensions  (Rx)...   § ...is  a  library  to  compose  asynchronous  and  event-­‐based   programs     § using  observable  collections  and  LINQ-­‐style  query   operators. ì  The  Reactive  Extensions  (Rx)...   ì  非同期とイベントベースプログラムを組み合わせるライブラリ   ì  観察可能なコレクションとLINQスタイルのクエリ演算子を使う 10
  • 11.
    Rx  ってなんぞ? § Reactive  Extension   § 非同期処理と、イベント駆動プログラムを、 observable  collection  と  LINQ  のクエリ演算子で扱 えるようにしたMSのライブラリ。   § イベントや、時間をシーケンス(連続した列)を して考えたものを処理していく。   § IEnumerable<T>  ではなく、IObservable<T>  と IObserver<T>が使われる。   11
  • 12.
    どうして、Rx  があるのか § 次期Windows  OS(Windows8)では、非同期プログ ラミングを強制させられる。   § C#  5.0  では、async  /  await  構文が追加。   § かなり、簡単に非同期処理が書ける。 12
  • 13.
    Rx  (IObservable<T>,  IObserver<T>)と   今までのLINQ     (IEnumerable<T>,  IEnumrator<T>)との違い § IEnumerable<T>:    元からあるコレクション(集合)を 処理する   § IObservable<T>:  イベントや、時間、非同期のものを 処理する。   §  Observable.Range  があるけど…   § どちらも、LINQ  クエリ演算子を使える。   13
  • 14.
    Rx  のコード例 § 今回のRxのサンプルは、よくあるマウスイベント の合成です。 var$mousemove$=$Observable.FromEventPattern<MouseEventArgs>(this,$"MouseMove")$ $$.Sample(TimeSpan.FromSeconds(2))$ $$.Merge(Observable.FromEventPattern<MouseEventArgs>(this,$"MouseDown"))$ $$.ObserveOnDispatcher()$ $$.Subscribe($ $$$$x$=> drawSomething(x),$ $$$$ex$=>$Console.Write(ex.Message),$ $$$$()$=>$Console.Write("end")$ $$);$ 14
  • 15.
    Rx  のコード例 § 今回のRxのサンプルは、よくあるマウスイベント の合成です。 var$mousemove$=$Observable.FromEventPattern<MouseEventArgs>(this,$"MouseMove")$ $$.Sample(TimeSpan.FromSeconds(2))$ 実際に合成しているメソッド $$.Merge(Observable.FromEventPattern<MouseEventArgs>(this,$"MouseDown"))$ $$.ObserveOnDispatcher()$ UIスレッドで処理をする $$.Subscribe($ $$$$x$=> drawSomething(x),$ シーケンスが読み込まれた際のメソッド $$$$ex$=>$Console.Write(ex.Message),$ 例外が吐かれた際に呼ばれる $$$$()$=>$Console.Write("end")$ $$);$ シーケンスが読み込み終わった際に呼ばれる 15
  • 16.
    § C#を使うときに、   LINQ(IEnumerable)  や、   Rx  (IObservable)  を使うと、   プログラミングが楽しくなりますよ!   16