元ネタ
RFPとは?
functional reactive programmingのことです。
詳細はこちら。
どんな時に役立つの?
webとかでイベントがどんどん発火する時、簡単かつ清潔に対応するが出来ます。例えば
var plus = $("#plus").asEventStream("click").map(1);
var minus = $("#minus").asEventStream("click").map(-1);
var both = plus.merge(minus);
both.onValue(function(val) { /* val will be 1 or -1 */ });
jQueryセレクターから簡単にevent streamを生成して操作する事が可能になります。
Bacon.js
ブラウザ、Node.js両方とも使えるRFPライブラリです。
コード
beats関数は元ネタの物をそのまま使っています。
Bacon = require 'baconjs'
you = new Bacon.Bus()
opponent = new Bacon.Bus()
result = you.toProperty()
.combine(opponent.toProperty(), beats)
.onValue (d) -> console.log d
you.push 'paper' # you: paper
opponent.push 'paper' # you: paper, opponent: paper => false
opponent.push 'rock' # you: paper, opponent: rock => true
you.push 'scissors' # you: scissors, opponent: rock => false
opponent.push 'paper' # you: scissors, opponent: paper => true