2015年4月5日日曜日

リアクティブ(Rx)プログラミングについて自分なりに落とし込んだ

Rxを理解する切り口

サーバ、システム、インフラ

非同期アーキテクチャ、アクターモデル、メッセージ駆動

プログラミング

Push型、イベント駆動、データ構造のストリーム化(※Functional Reactive Programming)、データバインディング

※FRP
業務アプリ実装にFRPを使ってみた http://programplusgirl.tumblr.com/post/52698153869/frp
FRPについて理解するために参考にしたものhttp://qiita.com/busyoumono99/items/b355150fb69eae1584c2

リアクティブ

「反応」を意味する

リアクティブプログラミング

データの変更が流れるように自動的に伝搬していくプログラミング手法

時間変化する値や振る舞いを宣言的に行う(手順的な記述にならない)


プログラミングパラダイム

・オブジェクト指向→オブジェクトとメッセージの集まりを作成し、オブジェクト間のメッセージを定義して問題を解決する
・関数型→プログラムを関数評価の連続とみなす。副作用や状態から関数を切り離す。

宣言型

性質を満たす結果が得られれば、結果を得る方法は気にしない。

データを扱うということ

・データは入力される(最初に揃わない)
・レスポンスを待つ(データはすぐに揃わない)
・データの全体がmassiveなため、部分的にしか使えない

データを扱うということ(課題)

非同期である
→ 時間軸に一様に配置されないから順番を記述しないほうが良い

ざっくり言って

「いつ呼ばれるかに依存しない書き方」ではないか

Rxを実現するのに必要な概念

・ストリーム(データをもつ時間軸、データはユーザからの入力であったりする)
・ストリームをsubscribeするオブジェクト
・ストリーム上で起きるシグナル(シグナルに対する振る舞いを個別にプログラムする)
・Push型のデータバインディング(UIもしくはデータが変更されたときに、変更のイベントが自動で届く仕組み)

RxJava

分かった気になる初めてのRxJava
https://speakerdeck.com/kirimin/fen-katutaqi-ninaruhazimetefalserxjava

この辺りまでの概念を考えた上であれば、適切にEventBusを使えるのではと思う。

EventBus

Implementing an Event Bus With RxJava - RxBus
http://nerds.weddingpartyapp.com/tech/2014/12/24/implementing-an-event-bus-with-rxjava-rxbus/

EventBus library

EventBus
https://github.com/greenrobot/EventBus

JVM言語 Kotlin

JVM言語 Kotlinは、ScalaやGroovyのように、Javaバイトコードを生成することでJVM上で動作する言語である。

JavaScriptの生成も標準でサポートしており、さらにAndroidまでサポートする。Android開発が軽くなるととても嬉しいので注目している。

以下、設計思想と特徴を簡単にまとめた。

## Kotlinの設計ゴール
  • Java互換
  • Javaバイトコードへのコンパイル
  • JavaScriptコードへのコンパイル
  • Javaと同等以上のコンパイル速度
  • Javaより安全(NULL安全など)
  • Javaより簡潔
  • Scalaよりシンプルな方法
  • 表現力を実用レベルに維持

## 特徴

  • オブジェクト指向である
  • プリミティブ型がなく、すべてがオブジェクトである
  • プロパティ、トレイと、オブジェクト宣言
  • 関数は第一級オブジェクト