2012年05月30日

Interactive Extensions(Ix) - Deferメソッド

   このエントリーをはてなブックマークに追加 Clip to Evernote
EnumerableEx.Defer静的メソッドは、実際の列挙が始まるまで、処理を遅延させます。

ためしに書いたコードです。
まずは、Deferを使わないコード


結果は以下の通りです。


となり、* は、foreachに前に表示されています。つまり、本当に列挙したい場所よりも
前に列挙が行われれています。
ToArray()を呼び出しているので当然ですね。

次に、Deferを使ったコード。


こんどは、* は、Startの後に表示されています。
つまり、遅延実行されているということです。


  

Posted by gushwell at 22:31Comments(0)TrackBack(0)

2012年05月27日

Interactive Extensions(Ix) - Throwメソッド

   このエントリーをはてなブックマークに追加 Clip to Evernote
EnumerableEx.Throw静的メソッドは、例外を発生するシーケンスを生成します。
文法上は、シーケンスを生成するわけですが、値を列挙せずに例外を発生させます。

以下のようなコードを書いてみました。


とにかく、拡張メソッドでなんでも書きたい人向けの機能かなと思います。
ちがってたらごめんなさい。

  
Posted by gushwell at 22:28Comments(0)TrackBack(0)

2012年05月23日

Interactive Extensions(Ix) - Whileメソッド

   このエントリーをはてなブックマークに追加 Clip to Evernote
EnumerableEx.While静的メソッドは、指定したシーケンス(第2引数)を第1引数で指定した
条件が成り立つ間、列挙します。


上の例は、0123012301230123...
と画面に示され、開始から、1秒間だけ、GetSequenceが呼び出されます。
実行してみればわかりますが、GetSequenceの途中で、Whileメソッドが終わることは
ありません。

1. 条件が成り立てば、2へ、そうでなければ、終了
2. GetSequence()ですべてを列挙

ということをやっているわけですが、あくまでの遅延実行でこれをやっているということです。

  
Posted by gushwell at 22:27Comments(0)TrackBack(0)

2012年05月20日

Interactive Extensions(Ix) - TakeLastメソッド

   このエントリーをはてなブックマークに追加 Clip to Evernote
EnumerableEx.TakeLast拡張メソッドは、シーケンスの後ろのN個を列挙するメソッドです。

これは、サンプルコードを書くまでもないですね。
いちおう。簡単なサンプルを示します。


結果は、


と表示されます。
  
Posted by gushwell at 22:23Comments(0)TrackBack(0)

2012年05月13日

Interactive Extensions(Ix) - StartWithメソッド

   このエントリーをはてなブックマークに追加 Clip to Evernote
EnumerableEx.StartWith拡張メソッドは、シーケンスの先頭に値を付加してくれます。 これ、前からあれば良いなーと思ってた機能です。

使い方はこんな感じ。


0 と nums が連結されて、新たなシーケンスとなります。

なお、可変引数となっているので、


という書き方もできます。

この場合の結果は、


と表示されます。
  
Posted by gushwell at 22:30Comments(0)TrackBack(0)

2012年05月06日

Interactive Extensions(Ix) - SkipLastメソッド

   このエントリーをはてなブックマークに追加 Clip to Evernote
EnumerableEx.SkipLast拡張メソッドは、後ろからn個の要素をスキップします。

シーケンスの要素数がいくつかわからないけど、最後の n 個は無視したい、という場合に使うことに なると思います。


結果は、


と表示されます。

  
Posted by gushwell at 21:30Comments(0)TrackBack(0)

2012年05月03日

Interactive Extensions(Ix) - Shareメソッド

   このエントリーをはてなブックマークに追加 Clip to Evernote
EnumerableEx.Share拡張メソッドは、
名前からすれば、列挙を共有するメソッドということになるわけですが、
なんて説明したら良いのか言葉でうまく言い表せません。

Shareメソッドで作成されたシーケンスは、ある場所にバッファリングされ、
列挙する際は、そのバッファーが利用されると言ったら良いのでしょうか。

まずは、そのコードと動きを見た方が分かりやすいです。


結果は、


です。


ではありません。

これを利用すれば、こんなコードが書けます。


結果は、


と出力されます。
これをShareを使わないで書くとすると、どうなるかを考えてみると、このメソッドの偉大さが 分かります。
このコードの場合は、String.Joinを使えばいいんじゃねっ、という突っ込みは無しでお願いします。

ちなみに、Share()メソッドが返す方は、IBuffer<TSource> となっています。

もう一つのオーバーロードメソッドがありますが、そちらは試してません。

  
Posted by gushwell at 22:00Comments(0)TrackBack(0)