RxJS 4 から 5 での変更点


この記事は bouzuya's RxJS Advent Calendar 2015 24 日目かつ RxJS Advent Calendar 2015 の 24 日目です。

はじめに

今日は RxJS 4 から 5 への移行 のドキュメントから抜粋して書きます。

RxJS 5

ここまで RxJS 4 (v4.0.7) を対象に書いてきました。

RxJS 4 は Reactive-Extensions/RxJS でしたが、 RxJS 5 は ReactiveX/RxJS で開発が進められています。2015-12-24 時点では 5.0.0-beta.0 です。

JavaScript から TypeScript へ

RxJS 4 が独自の module (concat) を使った JavaScript で書かれていたのに対して、RxJS 5 は ES6 module style の TypeScript で書かれています。RxJS 4 にも *.d.ts は配置されていましたが JavaScript で書かれていました。 RxJS 5 では TypeScript で書かれています。

標準的な module 構造ですし型情報のおかげで読みやすくなっています。

Observer の method 名

Observer にあった onNext / onError / onCompletednext / error / completed に変更されました。ES7 Observable の仕様に合わせたものです。おそらく onNext を明示的に呼び出すのは不格好だからでしょう。

Disposable → Subscription

DisposableSubscription になり、dispose()unsubscribe() になりました。以前から class Subscription implements Disposable のつもりだったかもしれません。subscribe との対応は unsubscribe のほうがずっと良いでしょう。

SubscriptionCompositeDisposable と同等の add() / remove() を持ちます。add された Subscriptionunsubscribe の際に合わせて unsubscribe されます。

Operator の rename や split

flatMapmergeMap という alias が追加されたほか、Operator の変更や分割や削除などが入っています。140 個近くあった operator は 90 個近くまで削減されています。一部を分割してこの数なので相当な削減です。

今回の Advent Calendar で紹介したものも、一部は削除されています。

Scheduler の rename

Scheduler の名前が JavaScript における実装に適した形に変更されています。

  • Scheduler.defaultScheduler.asap
  • Scheduler.currentThreadScheduler.queue
  • Scheduler.immediateundefined

おわりに

今日は RxJS 4 から 5 への移行を見ていきました。時期的に微妙だったので今回は 4.0.7 にしたのですが、RxJS 5 系の方がずっと簡潔ですし読みやすいと思います。

すこし後悔しています。