かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

F#でリアクティブプログラミング

F#のIEventインターフェースを見てみたらIObservable実装してることに気づきました。そして、Observableモジュールというものも定義されている・・・。
これは出来る!!!ということで、ちょろっと試してみました。

// int型を発行するIEventを作る
let e = Event<int>()
let event = e.Publish
// 偶数のみ出力するようにフィルタリング
event
	|> Observable.filter (fun i -> i % 2 = 0) 
	|> Observable.subscribe (printfn "%d")
	|> ignore

// 1〜10までTrigger(発行)してみる
[1..10]
	|> Seq.iter e.Trigger

実行すると、偶数のみフィルタリングして表示されるってあんばいです。

// 実行結果
2
4
6
8
10

いいですねいいですね!C#とかでReactive Extensionsを別途入れてやってたようなことがF#だと既に標準で出来るようになってる。関数型言語の強みですね。