FRP in Swift勉強メモ その1 ~ FRPの基礎 ~

August 21, 2015

リアクティブプログラミング の基本的なこと

  • 時間と共に変化する値とその振る舞いを宣言的に行う
  • データ変更の通知がどのように行われるかの詳細は隠蔽されている
  • 値の関係性だけに着目し、その値がどのように届けられるか、いつ届けられるかは隠蔽されている
    • 非同期データの扱いに向いている

FRPの基本的なこと

  • 非同期データストリーム
    • シグナル
    • 購読(subscribe)
  • データバインディング
    • 単方向 / 双方向
    • Push型 / Pull型

ストリーム

  • 非同期イベントを時間軸上にならんだイベントシグナルとして扱う
    • 無限リストとしてあかえる
      • map, flatMapなどが使える
    • どんな非同期でも同じモデルで扱える
      • UIイベントのような非同期で
      • Future/Promiseのような非同期
      • 通常の値でも同様に扱える

シグナル

イベントが発生した際には、ストリームは以下の3つのシグナルを発生させる

  • Next
  • Error
  • Completed

Next

  • イベント発生時に発行されるなんらかの値
    • クリックされた位置
    • APIのレスポンス
  • なんの値かはイベントの種類による
  • 何度も発生する

Error

  • エラーを通知するシグナル
  • エラーシグナルが発行されると、そのあとはどのシグナルも発行されない

Completed

  • ストリームが終了する際に発行される完了のシグナル
  • 完了シグナルが発行されると、そのあとはどのシグナルも発行されない
  • かならず完了シグナルが発行されるとは限らない
    • 例えば、ボタンタップなど終了がないもの

購読(subscribe)

  • シグナルを観測すること
  • subscribeするとシグナル発生時に呼び出される
  • ストリームは観測対象であることからObservable, Subjectなどと呼ばれる

データバインディング

データソース(M)とUI(V)の橋渡し、関連付けをすること。

単方向 / 双方向

  • DataSource -> UI
    • データの変更に伴って表示を変更する
  • UI -> DataSource
    • ユーザの入力等をデータソースに反映する

Push型 / Pull型

  • データバインディングで自動的に変更が通知されるような 動きをPush型
  • 自分で変更を取りに行くような動きをPull型
  • リアクティブプログラミングはPush型の反応に対して処理を記述していく
このエントリーをはてなブックマークに追加