かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Reactive Extensions入門 3「Where」

Reactive Extensionsを使ってHello worldを書いてきました。これだけだと、ただのObserverパターンだし、イベントと比べて何が嬉しいかわからないですが、こいつにWhereなどのLINQでお馴染みのメソッドを使ってフィルタリングをかけたりすることが出来ます。


ちょっと嬉しくなるかな。ということで、サンプルです。

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        var subject = new Subject<int>();

        // subjectから発行された値が3じゃないとSubscribeしている
        // IObserverに通知しないフィルタを仕掛ける
        subject.Where(i => i == 3)
            .Subscribe(i =>
                Console.WriteLine("OnNext : " + i));

        // 1, 2, 3を発行しても3しかコンソールに出力されない
        subject.OnNext(1);
        subject.OnNext(2);
        subject.OnNext(3);
    }
}

実行結果は、以下のようになります。

OnNext : 3

1と2をOnNextで発行していますが、WhereでフィルタリングされたSubscribeしている所まで到達しません。こんな風にLINQでお馴染みのメソッドを使ってObserverパターンに便利な機能が色々追加されています。