かずきのBlog@hatena

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

Reactive Extensions

MVVMの小さなサンプル サケ弁タイマー2

1つ前のサケ弁タイマーのサンプルですが、Modelに該当する部分をid:anis774さんのコードをマルパクリしていたのをReactive Extensions使うように書き直してみました。以下からダウンロードできます。 SakebenTimer2.zip 因みにModel部分のコードだけ以下に…

非同期処理を含むメソッドの単体テスト方法

Reactive Extensionsを使うと簡単に非同期処理を書くことが出来るのですが、単体テストをしようとすると非同期処理って非常にテストしづらいです・・・。 例えば以下のようなパターン var target = new TestTargetObject(); target.GetHogehoge(); // 例えば…

「奴はとんでもないものを盗んでいきました。LINQとRxです」

ということで、先日Twitterで呟きあってたことを頭の中で整理してみました。 まだ、いまいちもやっとするところはあるのですが、とりあえずたたき台としてアップします。因みに、ネタ元はこちら。 冬至のLINQ、Rx談義 そして、上記のつぶやきから感じたこと…

Reactive Extensions入門「まとめ」

2012/03/06 再入門という形で書き直しています。 http://d.hatena.ne.jp/okazuki/20120305/1329923070とりあえず、14回くらい書いたので現時点でのまとめです。 若干Reactive Extensionsに対する熱もさめてきたので、これからはペースが落ちると思われます!…

Reactive Extensions入門 14 「OKが出るまで待つ」

さて、Reactive ExtensionsのIObservableには、Publishというメソッドがあります。このメソッドは、IObservableが通知する値を塞き止めるような効果があります。 Publishメソッドが返すのは、IConnectableObservableという型で、こいつのConnectメソッドを呼…

Reactive Extensions入門 13「値を集めて回る」

LINQでお馴染み?Aggregateみたいな動きをするメソッドも当然Reactive Extensionsで使えます!! ただ、Aggregateは集計し終わった値だけ返しますが、集計途中の値を全て報告してくれるScanというメソッドもあります。 使い方は、どちらも同じで第一引数に初…

Reactive Extensions入門 12「非同期実行のためのメソッド」

なんだかんだで、このシリーズも12回目になりました。 説明順番は、見知ったもの、面白そうなものという順番なので特に意味はありませんが、今日は、Observableに定義されているメソッドの中から、非同期実行をIObservableにしてくれる人たちから一部分だけ…

Reactive Extensions入門 11「非同期処理用のSubject」

その名もAsyncSubjectです。非同期処理を自前で実装してIObservableを返すようなメソッドを作るときに使えます。 こいつは、OnCompleted()メソッドメソッドを呼び出すと、最後にOnNextした値を通知するようになります。特徴としては、OnCompleted()を呼ぶ前…

非同期処理を行うメソッドの戻り値は全てIObservableにしてしまえばいいんじゃないんだろうか

最近、タイトルの通りのことを思っています。 今の非同期処理のAPIは下のようなコールバックを渡す形や、完了イベントを処理する形が一般的だと思います。(あとはBegin〜とEnd〜のメソッドのペアとか) public void Hoge(int param, Action<int> callback) { // </int>…

Reactive Extensions入門 10「合成(SelectMany)」

さて、次はIQueryableから何かが通知されたら、それに応じた処理をしてIQueryableを返すという風にIQueryableを連鎖させるようなイメージの用途に使えるSelectManyメソッドを紹介します。 使い方は割と簡単で以下のように使えます。 var s = new Subject<int>(); </int>…

Reactive Extensions入門 9「合成(MergeとZip)」

さて、これまでは、単一のIObservableを相手にしてきましたが、複数のIObservableを合成して使う方法を紹介したいと思います。 Merge 単純に2つのIObservableをくっつけます。 var s1 = new Subject<string>(); var s2 = new Subject<string>(); // s1とs2を1つのIObservabl</string></string>…

WCF RIA ServicesのメソッドをReactive Extensionsのメソッドチェインに入れるためのおまじない

こんなの用意しておけばいいかなぁ。 using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel.DomainServices.Client; public static class DomainContextExtensions { public static IObservable<IEnumerable<TEntity>> LoadAsObservable<TEntity></tentity></ienumerable<tentity>…

Reactive Extensions入門 8「バッファリング」

さて、IObservableに対してWhereやSelectしてSubscribeするだけっていうのにも飽きてきたので、少し趣向を変えてみます。 今回紹介するのは、バッファリングするメソッドです。 以下のようなメソッドがあります。 BufferWithCount BufferWithTime BufferWith…

Reactive Extensions入門 7「Select」

Reactive Extensionsは、LINQのメソッドも使えます。前にWhereを紹介したので、今回はSelectを紹介します。こいつは、単純に値を変換するのに使えます。たとえば、有名なFizzBuzz問題を書くと以下のような感じです。 using System; using System.Linq; class…

Reactive Extensions入門 6「非同期呼び出しの終わりを監視する」

さて、前回はイベントをIObservableにする方法を見ました。次は、非同期呼び出しをIObservableにしてみようと思います。.NETでは、非同期の呼び出しはBegin〜, End〜のメソッドのペアでやるのが一般的です。例えば・・・ // 5秒待って引数で渡された数だけ文…

Reactive Extensions入門 5「イベントを監視する」

前回は、Observableクラスに定義されたメソッドをいくつか紹介しました。今回は、いよいよ実際に使いでのあるメソッドを紹介しようと思います。今まで紹介したメソッドは、どちらかというと動作確認に使うのに適してると思います・・・。さて、Reactive Exte…

Reactive Extensions入門 4「Observableを作成する便利なメソッド」

さて、これまでIObservableを実装したり、便利なSubjectを使ってきたりしましたが、IObservableを作成するための便利なファクトリクラスがReactive Extensionsにはあります。名前はObservableです。LINQのEnumerableと同じような感じでとりあえず使うことが…

Reactive Extensions 応用「ドローイングツール」

入門ばっかりで飽きてきたので、応用的なものを作ってみました。因みにWPFアプリケーションです。 各種イベントを監視するObservableを用意します。 // マウスダウンイベント var mouseDown = Observable.FromEvent( (EventHandler<MouseButtonEventArgs> h) => new MouseButtonEve</mousebuttoneventargs>…

Reactive Extensions入門 3「Where」

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

Reactive Extensions入門 Hello worldその2

1つ前の記事で、IObservableとIObserverを使って簡単なObserverパターンを実装してみました。まだまだ、Reactive Extensionsの便利な機能を使うのには遠く及びません。その上、実装するのは決まった感じのコードを書くため非常にめんどくさいです。 そもそも…

Reactive Extensions入門 1 Hello world

Reactive Extensionsって色々小難しくIEnumerableの数学的に反対に位置するのがIObservableだって言われたりしてますが、とりあえずObserverパターンってやつです。 なので、一番シンプルなReactive ExtensionsのHello worldをやると、単純なObserverパター…

Reactive Extensionsを始めてみた

とりあえず、以下からインストール。 http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx 例題を下のページを見て学ぶ http://rxwiki.wikidot.com/101samples http://www.codeproject.com/KB/Parallel_Programming/RxByExample.aspxプロジェクトには以…