What's RxAndroid? RxAndroidとは、ReactiveXのAndroid版で、いわゆるオブザーバーパターンを簡単に実装できるものです。 すでに記事は数多く出回っていますが、実際に自分が使ってみて感じた二つの利点を書いておきます。 非同期処理が楽 複数個所で最新の情報を表示 導入はbuild.gradleに書けばできます。
ブードゥーの秘術により、INotifyPropertyChanged不要で、値の変更を検知し、IObservable化します。例えばINotifyPropertyChangedじゃないところから、WidthとHeightを引き出してみます。 using Reactive.Bindings.Extensions; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.ObserveEveryValueChanged(x => x.Width).Subscribe(x => WidthText.Text = x.ToString()); this.ObserveEveryValueChanged(x => x.Height).Subscribe(x => Heig
追記(2017/05/2) redux-sagaでの非同期バージョンの紹介とリンクを追記。 追記(2017/2/23修正) 元記事の追記3にて言及を頂いたように、以下の「見易い版」コードは元コードが実現していた機能が抜けおちているという誤りがあります。遅くなりましたが、お詫びの上修正させていただきます。 修正内容は以下の「refreshボタン押下ですべての候補を消去」の項目に追記しました。 上記追記の趣旨として、リアクティブプログラミングはそれほど判り難いのだ、というご指摘になっていますが、返す言葉もございません。 はじめに 先日「リアクティブプログラミングとは何だったか」という記事を目にしまして、内容はたいへん興味深かったのですが、以下の記述がありました。 『宣言的』といえそうなのはわかりますし、パラダイムとして従来のコードとは一線を画すものであることは確かですが、どう贔屓目にみてもひた
問題 以下のコードを実行するとside effectは何回表示されるか? var source = new Rx.Subject<number>(); var stream = source.do(i => console.log("side effect")); stream.subscribeOnNext(i => console.log("child1: " + i)); source.onNext(1); stream.subscribeOnNext(i => console.log("child2: " + i)); source.onNext(2); 答え 3回 なぜ2回ではないのか? Rxでは基本的にオペレータをつないだ時にストリームの接続が適用されるのではなく、Subscribeした時に初めて接続が適用される つまり、上記コードでいえば、streamというのは「source
Observable.prototype.map ReactiveX - Map operator Observable.prototype.map API Document Observable.prototype.map Source Code Array.prototype.map でもおなじみのものです。動きについては説明は不要でしょう。 import { Observable } from 'rx'; Observable .from([1, 2, 3]) .map(value => value * 2) .subscribe( value => console.log(`onNext: ${value}`), error => console.log(`onError: ${error}`), () => console.log(`onCompleted`) ); // onN
RxJavaでは非同期処理などで非常に便利なライブラリですが、そのエラーハンドリングもとてもスマートに行うことができます。ここではRxJavaのエラーハンドリングの詳細について説明したいと思います。 subscribeでのエラー処理 通常はsubscribe()でエラーを受け取ってハンドリングすることとなると思います。 Observable .create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { log("subscribe"); subscriber.onNext("emit 1"); subscriber.onNext("emit 2"); subscriber.onError(new Throwable());
public static void StartBackgroundWork() { Console.WriteLine("Shows use of Start to start on a background thread:"); var o = Observable.Start(() => { //This starts on a background thread. Console.WriteLine("From background thread. Does not block main thread."); Console.WriteLine("Calculating..."); Thread.Sleep(3000); Console.WriteLine("Background work completed."); }).Finally(() => Console.WriteLi
Push型配信の特徴は情報の分配 (同じデータを複数の購読者に送信すること) です。しかし、前回の内容の通り、ColdなObservableでは分配をすることができません。Rxの旨みを最大限に引き出すためには、ColdなObservableをHotなObservableに変換する必要があります。今回はこの変換の方法と挙動について触れてみたいと思います。 変換のイメージ ColdなObservableは購読対象者と1対1の関係を持ちます。以前も出てきた「山から湧き出る水」イメージで言えば、湧き出た水が1本の川 (購読者に続く道 = Subscribe) となって下っているような状態です。HotなObservableは1対多の関係を持つので、詰まるところHotなObservableに変換するということは「川を複数の支流に分岐」させれば良いわけです。 ここでポイントになるのは、「1本の川を分岐し
UniRxについての記事のまとめはこちら RxのIObservable<T>にはHot/Coldという大きな2つの特徴があります。 これら性質を理解しないままストリームを設計すると、意図した動作をしてくれない場合があります。 今回はこのHot/Coldの性質について簡単にまとめたいと思います。 概要 一言で言うと? Cold : ストリームの前後をつなぐだけのパイプ。単体では意味が無い。だいたいのオペレータはこっち。 Hot : ストリームから値を発行し続ける蛇口。常に垂れ流し。後ろにパイプがたくさん接続できる。 細かく説明すると Cold Observable 自発的に何もしない受動的なObservable Observerが登録されて(Subscribeされて)初めて仕事を始める ストリームの前後をただつなぐだけ。ストリームを枝分かれさせる機能は無い。 Hot Observable 自
社内のRxJava勉強会用の資料です。 軽く、ほんの軽くRxJavaのサブセットを20行ほどで実装してみました。 https://github.com/gfx/RxInTheBox 概要 RxJavaはPromise的なもので、連続した「イベントの発生 / 値の生成」を扱えるようにしたもの Observableは「イベントが発生するかもしれない状態 / 値の生成中」という状態を表すオブジェクト OnSubscribeはObservableの中身で、「イベントの発生 / 値の生成」をObservableに通知するためのオブジェクト SubscriberはObservableから「発生したイベント / 生成された値」を受け取るコールバック RxJavaの捉え方 まずRxJavaですが、いくつかの捉え方があります。 リスト処理の抽象化・ストリーム化 Optional的な何か Promise的な何
このところ、複数の人からリアクティブプログラミング(RP)ってつまり何なんですかと聞かれることがあった。そのたびに非同期データストリームが…みたいな説明をしていたのだが、たいてい双方納得した感じにはならなくて、まあ難しいっすね…という感じで終わってしまっていた。 iOSとAndroidでの用途 自分は理論より実践からしか考えられないタイプなので、もっと現場寄りの説明ができないか常々考えていた。そこで自分がiOSとAndroidアプリを実装する際に使っているReactiveCocoaとRxJavaの用途を考えてみたところ Promise(の高機能版) 複数のAPIコールを連鎖させたい場合にコールバックヘルを避けたい データバインディング(の高機能版) Modelの変更とViewの変更を同期したい の2つがメインだった。 この2つはRPライブラリを入れなくても実装できる。JavaScriptな
6/24 に開催された 【東京】JJUG ナイトセミナー 「Reactive Streams特集」 に参加してきました。これはその感想エントリになります。 ここ最近は勉強会に参加しても、それについてのエントリを書くのをサボってましたが (^^;; 、今回の勉強会は自分にとって非常に考えるところが多かった内容でしたので、ちょっと思ったところをだらだらっと並べてみました。 勉強会について 勉強会の内容は 2 部構成になっていました。前半は岡本雄太 (id:okapies) さんによる「Reactive Streams 入門」で、Reactive Streams について、似た言葉である Reactive Programming や Reactive Manifesto と併せて、それぞれの概念の違い、関わりについて分かり易く説明してもらいました。 https://speakerdeck.com
Rxの基本 何らかのプロバイダ IObservable<T> をSubscribeすることで監視することにより、 プロバイダから状態の通知(Push)をオブザーバで受け取ることによって構成されるオブザーバパターン。 プロバイダ 別称、データソース、ストリームなどと呼ぶことがある。 プロバイダの役割 ある状態の通知を行うのがプロバイダの役割である。 文脈によっては、通知ではなく、Push、発行、イベントなどと言うことがある。 状態の通知 プロバイダは、状態の通知をオブザーバに対して行う。 オブザーバは、インターフェース IObserver<T> を実装しており、下記のメソッドを公開している。 メソッド 概要
はじめに もうすっかり年末なので、これから2015年にかけてアプリケーションアーキテクチャがどのようになっていくのかという個人的な考え/妄想や背景について、「リアクティブ」というキーワードをもとににまとめてみたいと思います。 Google Trendsを見ると"reactive programming"という言葉は2010年前後から、ゆっくりとバズをし始め、現在も上昇を続けています。 また、仕事としては、2010年ごろから大規模なWebサービス開発において、フロントエンド、バックエンド、アルゴリズム改善といった様々な箇所で、リアクティブプログラミングの要素を取り入れながら、アーキテクチャの改善を進めてきました。そのため、こういったアーキテクチャがコード品質の維持や安定性の向上、実際的で複雑な問題の解決にも適応可能であるということを実感として持っています。 近年、そういった要素が様々なツール
(この記事は、Reactive Extensionsの素晴らしさを伝えるために書かれたものです) Linqはふつーに使ってる、Rxは解説記事を読んでみたことはあるけどなるほどわからんだった人あたりを対象にしています。 Reactive Extensionsとかいうやつ Reactive Extensions!!!(略して、Rx!) C#のサイキョウライブラリの一つであり、C#に革命をもたらしたLinqをさらに発展させてなんだかめちゃくちゃよく分からないものにしてしまったようなもの。 詳しいことは後で書くので、とりあえずはLinqっぽいすごいやつだと思っておけばいいです。 Rxの解説など Rxは時間軸をシーケンスと見なして関数を適用していく関数指向なライブラリである IEnumerable<T>をベースとするLinqに対して、IObservable<T>をベースとした拡張メソッド群 Linq
REST 処理を扱いやすく実装する Android の REST クライアントのネットワーク処理と非同期処理について、最近流行っている OkHTTP と Retrofit と RxAndroid の組み合わせを使ってみました。これらはそれぞれ次のような機能を提供するライブラリです。 RxJava の Android 版 リアクティブプログラミングを Android で実装するためのライブラリ イベントベースで遅延実行や非同期コールバックなどを実装可能 なお、Retrofit が OkHTTP と RxAndroid の架け橋になってくれるため、組み合わせてシンプルに記述可能になります。 導入 まずはこれら3つのライブラリを Android プロジェクトに導入しましょう。 dependencies { compile 'com.squareup.okhttp:okhttp:2.4.0' co
なんでこの記事書いたのか 今開発中のプロダクトにおいて、RxJavaの導入をやってみたので、実際に使った箇所とその例、調べないとわからなかったことを載せておきました。 そう(retrolambdaのためにjdk8を投入)までして導入したかったメリットを話してくれ、サンプルコードがないとわからん、といった声を頂いているので、実際に何が解決されたのか、どんなコードで解決したのかということと、そのために勉強しなくてはならなかった点について書いています。 (追記)警告:差分作ってコード上では解決したんですが、この差分まだ「リリース」したわけじゃないので、その点だけご注意くださいmm 続報あり次第追記します。 追記:リリースして安定運用しています!最近まで監視に難がありましたがそれも修正しました。この記事の監視スニペットも更新済みです! なぜRxJavaを導入したのか 次の課題をまとめて解決できるの
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く