RxShowcase -for ignote & i-Jupiter-

22
RxShowcase -for ignote & i-Jupiter- September 14 th , 2012 xin9le

description

2012/09/14 ignote & i-Jupiter訪問セミナー資料

Transcript of RxShowcase -for ignote & i-Jupiter-

Page 1: RxShowcase -for ignote & i-Jupiter-

RxShowcase-for ignote & i-Jupiter-

September 14th, 2012

xin9le

Page 2: RxShowcase -for ignote & i-Jupiter-

AdvertisingProfileName鈴木孝明

Twitter Account@xin9le

AwardMicrosoft MVP for Visual C#

Bloghttp://xin9le.net/

HobbyProgramming, Piano, Tennis, English

Page 3: RxShowcase -for ignote & i-Jupiter-

Advertising

@ITで連載中

連載:C# 5.0 & VB 11.0 新機能

「async/await非同期メソッド」入門

http://www.atmarkit.co.jp/fdotnet/chushin/masterasync_index/

Page 4: RxShowcase -for ignote & i-Jupiter-

What’sReactive Extensions

Page 5: RxShowcase -for ignote & i-Jupiter-

• 簡単なサンプルでRxを体感

• 入力文字の遅延表示

Q : どれだけのコードで実現可能?

A : たった1行!!

First Experience About

Page 6: RxShowcase -for ignote & i-Jupiter-

• 時間/イベント/非同期処理をLINQの形式で記述

• IEnumerable<T>のLINQの拡張 (と考えてOK)

• .NET 3.5 SP1以降、SL4以降、WP7で利用可能

• 特に非同期APIしかないSilverlight環境で威力を発揮

• Windows Phone 7にのみ標準搭載

• RxJSというJavaScript版もある

• Microsoftの正式なプロジェクト

About Sequence

Page 7: RxShowcase -for ignote & i-Jupiter-

• データ群を「時間軸方向のまとまり」と考える

• こう見做せるものはすべて統一的に扱える

Sequence

[出典] 連載 : Reactive Extensions (Rx) 入門 - @IT

How to Get

Page 8: RxShowcase -for ignote & i-Jupiter-

1. NuGet Gallery – Rx-Main より取得

How to Get How to Get

Page 9: RxShowcase -for ignote & i-Jupiter-

2. ダウンロードサイトより取得http://www.microsoft.com/download/en/details.aspx?id=28568

How to Get

Page 10: RxShowcase -for ignote & i-Jupiter-

Basis forReactive Extensions

Page 11: RxShowcase -for ignote & i-Jupiter-

• 疎結合のためのデザインパターン

• 具象クラス間の依存なしに状態変化を通知する

• データ変更 → UI更新

• データがUIを知っている設計は極めて汎用性が低い

• 観測対象 (サブジェクト) と観測者 (オブザーバー) で抽象化

• 一般的にはインターフェース/イベントで実現

Observer Pattern Structure

Page 12: RxShowcase -for ignote & i-Jupiter-

Structure of Pattern

Page 13: RxShowcase -for ignote & i-Jupiter-

• IObserver<T> : 観測者

• IObservable<T> : 観測対象

• .NET Framework 4で新たに搭載された

• .NET 3.5 SP1 / Silverlight 4環境ではRxライブラリが提供

• Windows Phone 7には標準搭載

Basic Interface Push vs

OnNext(T value) 状態の変更を通知

OnError(Exception error) エラーの発生を通知

OnCompleted() 完了を通知

Subscribe(IObserver<T> observer) 通知先を登録

Page 14: RxShowcase -for ignote & i-Jupiter-

Push vs Pull LINQ Style

• 経路接続を行い受信待機

• IObservable<T>

• 各々必要に応じて取得

• IEnumerable<T>

Push型 Pull型

Page 15: RxShowcase -for ignote & i-Jupiter-

• メソッド形式

• クエリ式形式

LINQ Style Sequence Image

Page 16: RxShowcase -for ignote & i-Jupiter-

• ベルトコンベアのようなイメージで考える

• モノが流れてくる (= IObservable<T>からの発行)

• 不純物を取り除く検査が行われる (= Where)

• 梱包作業が行われる (= Select)

• 配送される (= Subscribe)

Sequence Image

Where Select

Page 17: RxShowcase -for ignote & i-Jupiter-

Showcase

Page 18: RxShowcase -for ignote & i-Jupiter-

• 効率的な表示更新

• マウス位置のトラッキング

• Web画像をスライド表示

• TwitterのTimelineを表示

More Samples

Page 19: RxShowcase -for ignote & i-Jupiter-

Today’s Summary-これだけは覚えよう-

Page 20: RxShowcase -for ignote & i-Jupiter-

• オブザーバーパターンによるPush通知が基本

• 値群を時間軸に乗ったシーケンスとして捉える

• IObservable<T>とIObserver<T>で実現されている

• 時間/イベント/非同期処理をLINQで記述可能

• .NET 3.5 SP1以降、SL4以降、WP7で利用可能

Summary Thanks

Page 21: RxShowcase -for ignote & i-Jupiter-

Enjoy Happy Programmingwith Reactive Extensions

ThanksThank you for your attending.

Page 22: RxShowcase -for ignote & i-Jupiter-

Next CommunityCome On!! Come All!!

Hokuriku.NET vol.102012/9/29

http://atnd.org/events/30789