functional reactive programming at booster 2014

19
INTRODUKSJON TIL FUNCTIONAL REACTIVE PROGRAMMING Kombinasjonen mellom funksjonell og reaktiv paradigme Booster 2014 Mikael Brevik 12/03/2014

Upload: mikaelbr

Post on 20-Jun-2015

732 views

Category:

Technology


4 download

DESCRIPTION

On norwegian: Lyntale på Booster Conf i 2014. Functional Reactive Programming i Javascript. Bruk av korte kodeeksempler i Bacon.js

TRANSCRIPT

Page 1: Functional Reactive Programming at Booster 2014

INTRODUKSJON TIL FUNCTIONAL REACTIVE PROGRAMMING

Kombinasjonen mellom funksjonell og reaktiv paradigme

Booster 2014 Mikael Brevik 12/03/2014

Page 2: Functional Reactive Programming at Booster 2014

Fremad-stormende #ithipster teknologi

Page 3: Functional Reactive Programming at Booster 2014

FUNKSJONELL PROGRAMMERING

En deklarativ programmeringsparadigme med funksjoner i fokus. Unngår tilstander og mutable objekter.

Unngår uønskede bieffekter med bruk av rene funksjoner

Page 4: Functional Reactive Programming at Booster 2014

FUNKSJONELL PROGRAMMERING

Vanlig med bruk av blant annet funktorer som map, filter og reduce.

[1, 2, 3].map(function (i) { return i * 2; }); //= [2, 4, 6]

[1, 2, 3].filter(function (i) { return i % 2 === 0; }); //= [2]

Page 5: Functional Reactive Programming at Booster 2014

FUNKSJONELL PROGRAMMERING

[1, 2, 3].reduce(function (acc, i) { return acc + i; }); //= 6

Page 6: Functional Reactive Programming at Booster 2014

Reaktiv Programming

Page 7: Functional Reactive Programming at Booster 2014

REAKTIV PROGRAMMERING

Kan beskrives som en metode for å holde systemet kontinuerlig oppdatert med omgivelsene.

En måte for data å reagere på endringer og oppdatere seg for å reflektere disse endringene.

Page 8: Functional Reactive Programming at Booster 2014

REAKTIV PROGRAMMERING

9 5

4 ADD

Page 9: Functional Reactive Programming at Booster 2014

Funksjonell Reaktiv

Programmering (FRP)

Page 10: Functional Reactive Programming at Booster 2014

FRP

To generelle konsepter 1.  Behaviours (Adferd) : f(t) -> v 2.  Events (Hendelse) : [(t, v)]

Page 11: Functional Reactive Programming at Booster 2014

FRP

Hendelser En diskret verdi. Eksempelvis museklikk eller en mengde.

I FRP blir adferder og hendelser behandlet som sekvenser og kan bli håndtert på en funksjonell måte.

Adferder En kontinuerlig verdi. Eksempelvis klokken, høyde eller vektorgrafikk.

Page 12: Functional Reactive Programming at Booster 2014

FRP

Gevinst av FRP •  Reaktive datatyper for representasjon av tilstand. •  Sammensettbar data / komposisjoner •  GUI uten bi-effekter.

Praktisk bruk

Page 13: Functional Reactive Programming at Booster 2014

FRP

Bacon.js Bacon er et bibliotek som kan brukes for å oppnå FRP i nettleseren

I Bacon kalles en adferd Property og hendelse kalles EventStream.

Page 14: Functional Reactive Programming at Booster 2014

FRP

I Bacon.js innkapsler vi datakilder som reaktive datatyper. •  fromEventTarget •  fromPromise •  fromCallback •  ...med flere

Page 15: Functional Reactive Programming at Booster 2014

Ren Javascript

Page 16: Functional Reactive Programming at Booster 2014

FRP

Bacon.fromEventTarget($('input'), 'keyUp') .map('.keyCode') .filter(function (code) { return code === 66; }); //= En EventStream med verdi hver gang //= tasten B blir trykket

Page 17: Functional Reactive Programming at Booster 2014

FRP

var getInputAsProperty = function (id) { var $el = $(id); return $el.asEventStream('change') .map('.currentTarget.value') // får inn jquery event obj. .toProperty($el.val()) // får inn tekst .map(Number); // gjør om til tall }; var $a = getInputAsProperty("#a"), $b = getInputAsProperty("#b"); $a.combine($b, _add).assign($("#sum"), "val");

Page 18: Functional Reactive Programming at Booster 2014

FRP

mouseMove // isClickDown er en property som er true når mus er klikket .filter(isClickDown) // Spre utover per 50. ms .throttle(50) // Gjør om til et parsable objekt .map(function (e) { return { x: e.clientX, y: e.clientY, color: randomColor }; }) // Tegn en figur .onValue(drawCircle)

Page 19: Functional Reactive Programming at Booster 2014

TAKK FOR MEG!

Mikael Brevik @mikaelbrevik