かずきのBlog@hatena

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

Reactive Extensions再入門 番外編「System.Reactive.Linq.Observableのメソッド一覧とメモ」

はじめに

記事の終わりを見据えるためにObservableクラスに定義されている拡張メソッドを列挙して、なんとなく説明のようなものを書いてみました。趣旨としては、以前id:neueccさんが行われていたReactive Extensions入門 + メソッド早見解説表と同じです。あと、現状での理解をなんとなく書いてるだけなので内容が間違ってる可能性もある上に、カテゴライズは適当です。

ファクトリ

  • Create Method : IObserverを使ってIOを作る。割と汎用的。
  • Defer(TValue) Method : IOを返すデリゲートを使ってIOを作る。
  • Empty Method : 空のIOを作る
  • FromAsyncPattern Method : Begin***, End***からIOを作る。
  • FromEvent Method : .NETのイベントからIOを作る
  • FromEventPattern Method : .NETのイベントからIO>を作る
  • Generate Method : for文で値を生成するイメージ。
  • Never(TResult) Method : 終わらないIOを作る
  • Range Method : 指定した範囲の値のIOを返す
  • Return Method : 指定した値を返すIOを返す
  • Start Method : IOを開始
  • Timer Method : 一定間隔で値を発行するIOを返す
  • Using(TSource, TResource) Method : IDisposableを使ってIOを作成する
  • Throw Method : 例外を発生させる
  • ToAsync Method : DelegateからFunc>を作成する

変換

  • Buffer Method : 指定した数 or 時間 or 任意のタイミングの間値をためる
  • Cast(TResult) Method : 文字通りcast
  • DefaultIfEmpty Method : 空ならデフォルト値を返す
  • Dematerialize(TSource) Method : IO>からIOへの変換
  • Materialize(TSource) Method : IOからIO>への変換
  • RefCount(TSource) Method : IConnectableObservableを参照カウンタで管理してくれる。
  • Select Method : 変換(射影かな)
  • Single Method : 最初の値(無い場合は例外)
  • SingleOrDefault Method : 最初の値(無い場合はデフォルト値)
  • ToObservable Method : IO -> IOへの変換?
  • Switch(TSource) Method : IO> -> IOへの変換
  • Window Method : 指定した数にまとめる

IOから何かへの変換

  • ToArray(TSource) Method : IOからT[]へ変換
  • ToDictionary Method : IOからIDictionaryへの変換
  • ToEnumerable(TSource) Method : IOからIEへの変換
  • ToEvent Method : IOからIEventSourceへの変換(OnNextイベントを持つオブジェクト)
  • ToEventPattern(TEventArgs) Method : IO>からIEventPatternSourceへの変換
  • ToList(TSource) Method : IOからIO>への変換
  • ToLookup Method : IOからIO>への変換

フィルタリング

  • Distinct Method : 一度出た値は通過させない
  • DistinctUntilChanged Method : 前の値と変わらない間は通過させない
  • OfType(TResult) Method : 型でフィルタリングする
  • Sample Method : 指定した間隔で最後に通過した値を返す
  • Where Method : 条件にあうものだけを通過させる

合成

  • Amb Method :一番最初に通知があったものを返す
  • CombineLatest(TFirst, TSecond, TResult) Method : 最後の値をキャッシュして何かしらに変更があったときに再評価的な感じ
  • Concat Method : 繋げる
  • Merge Method : マージ(統合)
  • SelectMany Method : IO -> IO
  • Zip Method : 2つのIOを待ち合わせて後続へ流す

集計

  • Aggregate Method : いろんな集計
  • Average Method : 平均
  • Count(TSource) Method : 数える
  • GroupBy Method : グループ単位にまとめる
  • GroupByUntil Method : グループ単位にまとめる
  • LongCount(TSource) Method : 超長い奴数える
  • Max Method : 最大値
  • MaxBy Method : 最大値
  • Min Method : 最小値
  • MinBy Method : 最小値
  • Scan Method : いろんな集計(途中経過込み)
  • Sum Method : 合計

Hot<->Cold変換

  • Multicast Method : Cold -> Hot (ISubject)
  • Publish Method : Cold -> Hot
  • PublishLast Method : Cold -> Hot 最後の要素だけ返す

その他

  • All(TSource) Method : 全部trueか
  • Any Method : どれかがtrueか
  • AsObservable(TSource) Method : subject系からIOへ変換するのにつかわれる
  • Contains Method : 存在確認
  • Do Method : 副作用
  • ElementAt(TSource) Method : 指定した場所の要素を取得
  • ElementAtOrDefault(TSource) Method : 指定した場所の要素を取得 or デフォルト値
  • First Method : 最初の要素の取得。
  • FirstOrDefault Method : 最初の要素の取得 or デフォルト値
  • ForEach(TSource) Method : for文
  • GetEnumerator(TSource) Method : IOからIEへの変換
  • IgnoreElements(TSource) Method : IOをすべて無視る
  • Last Method : 最後の値を返す
  • LastOrDefault Method : 最後の値を返す or default
  • Repeat Method : IOを繰り返す
  • Replay Method : IOを一時的にブロック。Connect後に全てをReplayする。
  • SequenceEqual Method : IOとIOが等しいか
  • StartWith Method : IOを引数で渡した値を最初に発行した後に続けて実行みたいな感じ。

IEnumerableへの変換

  • Latest(TSource) Method : 最後に発行された値を返すIEnumerableを返す。MoveNextで値の発行を待つのが特徴。
  • MostRecent(TSource) Method : 最後に発行された値を返すIEnumerableを返す。MoveNextで値が発行されていなくてもキャッシュを返すのが特徴。
  • Next(TSource) Method : 次の値を返すIEnumerableを返す。MoveNextで値の発行を待つのが特徴。

時間系

  • Delay Method : 遅延させる
  • Interval Method : 指定した時間間隔で値を発行するIOにする
  • Throttle Method : 指定時間値が通過しなかったら最後の値を通過させる
  • TimeInterval Method : TimeIntervalへ変換。値と、前の値が発行されてからの間隔をTimeSpanとしてつけてくれる。
  • Timeout Method : 指定した時間値が来ないと例外
  • Timestamp Method : IOからTimestampedへ変換。値と値が発行された時間がとれる。

エラー処理系

  • Catch Method : 例外時の処理を行う
  • Finally(TSource) Method : IOシーケンスの終わりに必ず実行される処理
  • OnErrorResumeNext Method : エラーが発生したときに次のIOを返す
  • Retry Method : エラー時に再度やりなおす

スレッド系

  • ObserveOn Method : 後続の実行スレッドを切り替える
  • SubscribeOn Method : 後続のメソッドの実行スレッドを切り替える?正直よくわからん。
  • Synchronize Method : 非同期に値が流れてきたものを同期的にする

飛ばす & 通過系

  • Skip(TSource) Method : 指定した数だけ飛ばす
  • SkipLast(TSource) Method : 飛ばした最後
  • SkipUntil(TSource, TOther) Method : IOのOnNextまで飛ばす
  • SkipWhile Method : trueの間飛ばす
  • Take(TSource) Method : 指定した数だけ通過させる
  • TakeLast(TSource) Method : 最後だけ通過させる
  • TakeUntil(TSource, TOther) Method : IOのOnNextまで通過させる
  • TakeWhile Method : trueの間通過させる

購読

  • Subscribe Method : 購読

使い方がよくわからない系

  • And(TLeft, TRight) Method
  • GroupJoin(TLeft, TRight, TLeftDuration, TRightDuration, TResult) Method : 外部結合的なイメージ?
  • Join(TLeft, TRight, TLeftDuration, TRightDuration, TResult) Method : 内部結合?
  • When Method : Join系とあわせてつかう?
  • Then(TSource, TResult) Method : Whenと合わせて使う?

書いてみて

Joinとかそこらへんがよくわからない。ちょっと調べてみようかなぁ。