かずきのBlog@hatena

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

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#だと既に標準で出来るようになってる。関数型言語の強みですね。