Impératif ~ Fonctionnel
Impératif ~ Fonctionnel
Impératif ~ Fonctionnel
Characteristic | Imperative approach | Functional approach |
---|---|---|
Programmer focus | How to perform tasks (algorithms) and how to track changes in state. | What information is desired and what transformations are required. |
State changes | Important. | Non-existent. |
Order of execution | Important. | Low importance. |
Primary flow control | Loops, conditionals, and function (method) calls. | Function calls, including recursion. |
Primary manipulation unit | Instances of structures or classes. | Functions as first-class objects and data collections. |
Réactive
Réactive
Réactive
Réactive
Réactive
FRP
FRP
Bacon
Bacon
Bacon
asEventStream
fromCallback
fromPromise
fromBinder
Bacon
tchoutchou.plug stream
tchoutchou.push 'run'
Bacon
stream.toProperty()
me.onValue()
me.assign($el, 'val')
me.and you
me.or you
changes()
sampledBy(stream)
Bacon
obs.map (value) ->
, obs.map '.target.value'
obs.filter (value) ->
obs.onValue
obs.doAction '.preventDefault'
obs.flatMap
obs.scan(seed, accumulator)
obs.log()
Bacon
Bacon
Bacon.combineAsArray(stream, property)
Bacon.combineTemplate({id: 1, username: userprop})
Bacon.when
[stream, event], (_, e) ->,
[stream], ->
Bacon.update null,
[stream, property], (_, value) ->,
[otherstream], (_) ->
Dans la vraie vie…
Dans la vraie vie…
Dans la vraie vie…
passwordInput = $pwd.asEventStream 'keyup blur'
passwordEntered = passwordInput.map (e) -> !! e.target.value
model.submitPassword.plug( $form.asEventStream 'submit'
.doAction '.preventDefault'
.filter passwordEntered )
passwordEntered
.not()
.assign $submit, 'attr', 'aria-disabled'