$30 off During Our Annual Pro Sale. View Details »

Reactive 4TW

Reactive 4TW

Reactive programming is a new big thing for a couple of years now, but it also shrouded with a distrust as any new technology with mindblowing concepts. Lets pretend together that you didn't hear about Reactive and start learning it from scratch!

Alexey Buzdin

September 24, 2015
Tweet

More Decks by Alexey Buzdin

Other Decks in Programming

Transcript

  1. Introduction to Reactive principles with RxJava
    @AlexeyBuzdin
    Reactive 4TW!

    View Slide

  2. @AlexeyBuzdin
    Developer / Trainer at

    View Slide

  3. this page was
    intentionally left blank…
    Reactive

    View Slide

  4. View Slide

  5. Good?

    View Slide

  6. or Bad?

    View Slide

  7. Scary

    View Slide

  8. but Productive!

    View Slide

  9. reactive /rɪˈaktɪv/
    1. showing a response to a stimulus.
    "pupils are reactive to light"
    2. acting in response to a situation rather than
    creating or controlling it.
    "a proactive rather than a reactive approach"

    View Slide

  10. reactive /rɪˈaktɪv/
    1. showing a response to a stimulus.
    "pupils are reactive to light"
    2. acting in response to a situation rather than
    creating or controlling it.
    "a proactive rather than a reactive approach"

    View Slide

  11. View Slide

  12. Observer
    Observable
    Object

    View Slide

  13. Observer
    Observable
    Object

    View Slide

  14. Observer
    Observable
    Object

    View Slide

  15. Observer
    Observable
    Object

    View Slide

  16. Observable

    View Slide

  17. Observer

    View Slide

  18. Object(Event)

    View Slide

  19. programming with asynchronous data streams
    Reactive programming is

    View Slide

  20. List balls = Collections.singletonList(new Ball());
    Observable pitcher = Observable.from(balls);
    Observer batter = new Observer() {
    @Override
    public void onCompleted() { /* Score! */ }
    @Override
    public void onError(Throwable e) { /* Shame */ }
    @Override
    public void onNext(Ball ball) { /* Hit! */ }
    };
    pitcher.subscribe(batter);

    View Slide

  21. List balls = Collections.singletonList(new Ball());
    Observable pitcher = Observable.from(balls);
    Observer batter = new Observer() {
    @Override
    public void onCompleted() { /* Score! */ }
    @Override
    public void onError(Throwable e) { /* Shame */ }
    @Override
    public void onNext(Ball ball) { /* Hit! */ }
    };
    pitcher.subscribe(batter);

    View Slide

  22. List balls = Collections.singletonList(new Ball());
    Observable pitcher = Observable.from(balls);
    Observer batter = new Observer() {
    @Override
    public void onCompleted() { /* Score! */ }
    @Override
    public void onError(Throwable e) { /* Shame */ }
    @Override
    public void onNext(Ball ball) { /* Hit! */ }
    };
    pitcher.subscribe(batter);

    View Slide

  23. List balls = Collections.singletonList(new Ball());
    Observable pitcher = Observable.from(balls);
    Observer batter = new Observer() {
    @Override
    public void onCompleted() { /* Score! */ }
    @Override
    public void onError(Throwable e) { /* Shame */ }
    @Override
    public void onNext(Ball ball) { /* Hit! */ }
    };
    pitcher.subscribe(batter);

    View Slide

  24. List balls = /* Infinite balls */
    Observable pitcher = Observable.from(balls);
    Observer batter = new Observer() {
    @Override
    public void onCompleted() { /* Score! */ }
    @Override
    public void onError(Throwable e) { /* Shame */ }
    @Override
    public void onNext(Ball ball) { /* Hit! */ }
    };
    pitcher.subscribe(batter);

    View Slide

  25. programming with asynchronous data streams
    Reactive programming is

    View Slide

  26. View Slide

  27. Everything can be a Stream:
    - collections
    - user inputs
    - hardware
    - properties
    - caches
    - data structures
    - etc.

    View Slide

  28. Collections
    List< > balls = Lists.emptyList();

    View Slide

  29. Everything can be a Stream:
    - collections
    - user inputs
    - hardware
    - properties
    - caches
    - data structures
    - etc.

    View Slide

  30. UserInput
    Button btw = new Button(ctx);
    btn.setOnClickListener(e -> {
    // Do something
    })

    View Slide

  31. Everything can be a Stream:
    - collections
    - user inputs
    - hardware
    - properties
    - caches
    - data structures
    - etc.

    View Slide

  32. Hardware
    LocationManager mng = (LocationManager)
    getSystemService(Context.LOCATION_SERVICE);
    LocationListener listener = new LocationListener() {
    public void onLocationChanged(Location location) {
    // Do something
    }
    …..
    };
    locationManager.requestLocationUpdates
    (LocationManager.NETWORK_PROVIDER, 0, 0, listener);

    View Slide

  33. Everything can be a Stream:
    - collections
    - user inputs
    - hardware
    - properties
    - caches
    - data structures
    - etc.

    View Slide

  34. UserInput
    SharedPreferences prefs =
    PreferenceManager.getDefaultSharedPreferences(this);
    prefs.getBoolean("keystring", true);

    View Slide

  35. Everything can be a Stream:
    - collections
    - user inputs
    - hardware
    - properties
    - caches
    - data structures
    - etc.

    View Slide

  36. DataBase
    select().from(t).where(row(t.a, t.b).eq(1, 2));

    View Slide

  37. Everything can be a Stream:
    - collections
    - user inputs
    - hardware
    - properties
    - caches
    - data structures
    - etc.

    View Slide

  38. Data Structures

    View Slide

  39. Everything can be a Stream:
    - collections
    - user inputs
    - hardware
    - properties
    - caches
    - data structures
    - etc.

    View Slide

  40. …and what next?

    View Slide

  41. Operations!

    View Slide

  42. Operations!
    - map
    - filter
    - zip
    - groupBy
    - collect
    - flatMap
    - etc.

    View Slide

  43. RealLife RX
    RxView.clickEvents(tapBtn)
    .map(new Func1() {
    @Override
    public Integer call(ViewClickEvent onClickEvent) {
    log("GOT A TAP");
    return 1;
    }
    })
    .buffer(2, TimeUnit.SECONDS)
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe( /* Observer here */)

    View Slide

  44. programming with asynchronous data streams
    Reactive programming is

    View Slide

  45. View Slide

  46. programming with asynchronous data streams
    Reactive programming is

    View Slide

  47. RealLife RX

    View Slide

  48. View Slide

  49. View Slide

  50. Try it Out!

    View Slide

  51. Q&A

    View Slide