FUNCTIONAL REACTIVE SYSTEMS
YOUR HOST: NATE ABELE
▸ Some PHP frameworks (Li3, CakePHP)
▸ AngularUI Router
▸ Architect @ Radify
▸ [email protected]
▸ @nateabele
Slide 3
Slide 3 text
FUNCTIONAL REACTIVE SYSTEMS
ATTENDEE LICENSE AGREEMENT
▸ Permission granted to watch this talk, without restriction
▸ Including but not limited to the right to apply knowledge, learn new
things & combine… or disregard entirely
▸ THE TALK IS PROVIDED “AS-IS”, WITHOUT WARRANTY OF ANY KIND
▸ INCLUDING BUT NOT LIMITED TO
▸ MERCHANTABILITY
▸ FITNESS FOR ANY PARTICULAR PURPOSE
▸ NONINFRINGEMENT
Slide 4
Slide 4 text
BUZZWORD BINGO
Slide 5
Slide 5 text
FUNCTIONAL REACTIVE SYSTEMS
TERMINOLOGY
▸ Functional: ¯\_(ϑ)_/¯ see Wikipedia
▸ Reactive: Time
▸ Systems: This talk === front-end only
Slide 6
Slide 6 text
FUNCTIONAL REACTIVE SYSTEMS
FUNCTIONAL
▸High-order function composition
▸Separate data from behavior
▸Purity
Slide 7
Slide 7 text
FUNCTIONAL REACTIVE SYSTEMS
FUNCTIONAL LIBRARIES
▸ Underscore
▸ LoDash
Slide 8
Slide 8 text
FUNCTIONAL REACTIVE SYSTEMS
FUNCTIONAL LIBRARIES
▸ Underscore
▸ LoDash
LIES
FUNCTIONAL REACTIVE SYSTEMS
FUNCTIONAL
var result = [];
for (var i = 0; i < people.length; i++) {
result.push(people[i].name);
}
Slide 12
Slide 12 text
FUNCTIONAL REACTIVE SYSTEMS
FUNCTIONAL
var result = [];
for (var i = 0; i < people.length; i++) {
result.push(people[i].name);
doSomethingElse(); <—— Badness
}
Slide 13
Slide 13 text
FUNCTIONAL REACTIVE SYSTEMS
FUNCTIONAL
people.map(person => person.name)
Slide 14
Slide 14 text
FUNCTIONAL REACTIVE SYSTEMS
FUNCTIONAL
import { prop } from 'ramda';
people.map(prop(‘name'));
Slide 15
Slide 15 text
FUNCTIONAL REACTIVE SYSTEMS
FUNCTIONAL
import { prop, map } from 'ramda';
const names = map(prop('name'));
names(people);
Slide 16
Slide 16 text
FUNCTIONAL REACTIVE SYSTEMS
FUNCTIONAL: UNDER THE HOOD
import { curry } from 'ramda';
const prop = curry((name, obj) => {
return obj[name];
});
// prop(name)(obj) === prop(name, obj)
// === prop()()(name)()()(obj)
Slide 17
Slide 17 text
FUNCTIONAL REACTIVE SYSTEMS
REACTIVE
▸ The observer pattern
▸ aka publish/subscribe
▸ aka streams
▸ aka observables
Slide 18
Slide 18 text
OBSERVABLES
PROMISES
VS.
FIGHT
Slide 19
Slide 19 text
FUNCTIONAL REACTIVE SYSTEMS
PROMISES
▸ Asynchronous
▸ A (possible) future value
▸ Exactly one value
▸ Immutable
▸ Automatic flattening
Slide 20
Slide 20 text
FUNCTIONAL REACTIVE SYSTEMS
OBSERVABLES
▸ Synchronous or asynchronous
▸ Zero to ∞ values
▸ No automatic flattening
Slide 21
Slide 21 text
FUNCTIONAL REACTIVE SYSTEMS
PROMISE USE CASES
▸ HTTP requests
▸
Slide 22
Slide 22 text
FUNCTIONAL REACTIVE SYSTEMS
OBSERVABLE USE CASE
▸ HTTP requests
▸ DOM events
▸ Websockets
▸ Iterators
▸ Arrays
▸ etc.