RE:ADV

UnityでADVを作るブログ

「Introduction to Rx」 の2章の冒頭だけなんとなく訳してみた

Introduction to Rx
こちらのページにRxの解説があるよって @neuecc 御大が書いていたので↓
neue cc - A Beginners Guide to Reactive Extensions with UniRx
なんとなく読んでいたのですが、まあ、さっぱりわからないんですね。

ただこちらのお仕事と

Reactive extensions入門v0.1

とりすーぷさん。

Unity - UniRx/同時に画面に写ったオブジェクトの数を数えてみる - Qiita

ネットに散らばる先導者をフォローしていたら、さすがに少し理解してきました。

そんな中、訳したらなんか役に立つかな、と思って上↑のIntroduction to Rxをちょっと日本語にしてみました。
確実に訳が間違ってる文があると思うのですが、まあ、こんなことが書いてあるんだー的な。

実際のメソッドの解説に入ったら、上のかずきさんの仕事でいいじゃないか、と気づいてそこまででやめたからほぼ意味ないのですが、個人的にはなにかしら整理できた感あり。

何事も入り方が大事だし、繰り返せる形式ってあるよね、、、ていう。

Introduction to Rx

PART2-Sequence basics

さて、Rxを用いて何かコードを書いてみたいところだろう。しかし、どこから始めたらいいだろう。わたしたちはすでに鍵となる型(key types)を見たが、自ら基礎的な道具であるIObserverやIObservableを作る必要はなく、subjectsを用いてファクトリーメソッドに働きかける方がいい。ただし、オブザーバブル・シークエンス(observavle sequence)を持っていたとしても、どうやってそこからわたしたちは目的のデータを取り出せるのか。わたしたちはオブザーバブル・シークエンスを作る基礎や、そこに値を流し込むこと、また、目的のバリューをそこからピックアップするといったことを理解する必要がある。

パート2では、オブザーバブル・シークエンスの構築とクエリの基礎を見ていく。LINQが鍵になる。より深い探求によって、ファンクショナル・プログラミングのコンセプトはその核にLINQの理解を伴っていて、そこではじめてRxはマスター可能なものになることをわたしたちは発見するだろう。わたしたちはクエリを三つのグループに分類する。それぞれのグループはそこから他のオペレイターが派生しているようなルート・オペレイターを持っている。このような分解作業はRxやクエリ・コンポジション、ファンクショナル・プログラミングに対する深い見通しを与えてくれるだけでなく、Rxの用意されたメソッドがあなたの必要に合わなかった場合に、目的に合ったカスタム・オペレイターをあなた自身が作れるようになるという目的に適っているだろう。

Creating a sequence

前のチャプターで、わたしたちは最初の拡張メソッドとしてSubscribeとそのオーバーロードを見た。また最初のファクトリー・メソッドとしてSubject.Create()を使用した。RxをRxたらしめているIObservableを豊かにする非常にたくさんのメソッド群を見ていこう。パプリック・インスタンスメソッドが割合に少ないことに驚かれるかもしれない。しかしそこには多くのパブリック・スタティック・メソッドがあり、またより特徴的なことには、非常に多くの拡張メソッドがある。あまりに多くのメソッドとそのオーバーロードがあるために、わたしたちはそれらをいくつかのカテゴリーに落とし込んで理解する必要がある。

※ある種の読み手はここから先の数チャプターはスキップできると考えるかもしれない。もしあなたがまさにLINQやファンクショナル・コンポジションに精通していると考えているなら、わたしはこう指摘するにとどめる。この本の意図するところは、Rx入門をまさにステップバイステップで行うことにあるのであり、読み手としてのあなたが、自身のプログラム(ソフトウェア)でRxを使えるようにすることにある。Rxを内蔵したアプリケーションはRxの基礎を適切に理解することで生まれる。Rxについて人々がおかすありがちな間違いは、Rxをビルトする原則に対する思い違いに起因している。それだけ心に留めてもらえたなら、どんどん読み進めていってほしい。

簡単なインスタンスサブジェクトを作成したときに見たkey typesの調査から始めるのが適切なように思える。最初のカテゴリーは、簡単にObservableインスタンスを作成する方法を与えてくれる[creational methods]だ。これらのメソッドは一般的に、単純に型付けされた値もしくは型そのもののシークエンスを生み出す種を保持する。(関数型プログラミングではこのことをその展開(unfold)機能に着目してアナモーフィズムと呼んでいる。)

Simple factory methods

observable.Return
*1

*1:以下メソッドの説明