4. 4
( Плюсы (
( Иммутабельные данные )
( Отсутствие состояния )
( Лень, как стратегия вычислений )
( Частичное применение и карринг ))
Получаем декларативный подход
5. 5
( Минусы (
( Производительность )
( Комьюнити слишком маленькое )
( Состояние есть, но оно скрыто ))
22. 22
События
var clicks = Bacon.fromBinder(function(sink) {
document.addEventListener('click', sink);
});
Ответы сервера
var responses = Bacon.fromBinder(function(sink) {
$.get('path/to', sink);
});
Таймер
var ticks = Bacon.fromBinder(function(sink) {
setInterval(sink, 1000);
});
Все что угодно – это stream
22
23. 23
События
var clicks = Bacon.fromBinder(function(sink) {
document.addEventListener('click', sink);
});
Ответы сервера
var responses = Bacon.fromBinder(function(sink) {
$.get('path/to', sink);
});
Таймер
var ticks = Bacon.fromBinder(function(sink) {
setInterval(sink, 1000);
});
Все что угодно – это stream
23
24. 24
События
var clicks = Bacon.fromBinder(function(sink) {
document.addEventListener('click', sink);
});
Ответы сервера
var responses = Bacon.fromBinder(function(sink) {
$.get('path/to', sink);
});
Таймер
var ticks = Bacon.fromBinder(function(sink) {
setInterval(sink, 1000);
});
Все что угодно – это stream
24
25. 25
// пусть получаем данные из сокета в форме
// {player : [Object] , score : [Integer] }
var totalScore = 0;
function calculateScore(data){
if(data.player.status == 'A'){
totalScore += data.score
}
}
socket.on('score', calculateScore);
Вычисления в императивном стиле
26. 26
var totalScore = socket.stream('score')
.filter(function (data){
return data.player.status == 'A';
})
.map('.score')
.reduce(function (sum, score){
return sum + score;
})
FRP упрощает вычисления
+ Вычисления не производятся, если они не нужны
+ Состояние чистое
+ Можно переиспользовать функции-обработчики