BreizhCamp 2016

#BzhCmp

Introduction à la FRP avec RxJS

BreizhCamp 2015

#BzhCmp

Grégory Houllier

Architecte Web @zetapush, passionné par le Front-End

Co-Fondateur de @RennesJS

#BzhCmp

BreizhCamp 2015

#BzhCmp

BaaS Temps Réel

(Authentification, Search, File & Data Storage, Push, Email, SMS, Cron, ...)

#BzhCmp

BreizhCamp 2015

#BzhCmp

Meetup le dernier jeudi de chaque mois

à SupInfo

#BzhCmp

Un brin de théorie

#BzhCmp

Programmation impérative

#BzhCmp

Paradigme décrivant les opérations en séquences d'instructions exécutées par l'ordinateur pour modifier l'état du programme

Source Wikipedia

Programmation évènementielle

#BzhCmp

Paradigme décrivant un programme par ses réactions aux différents événements qui peuvent se produire, c'est-à-dire des changements d'état de variable

Source Wikipedia

Programmation déclarative

#BzhCmp

Paradigme consistant à créer des applications sur la base de composants logiciels indépendants du contexte et ne comportant aucun état interne 

Source Wikipedia

Programmation fonctionelle

#BzhCmp

Paradigme consistant a représenter un programme comme un ensemble d'évaluation de fonctions mathématique.

Source Wikipedia

Comme le changement d'état et la mutation des données ne peuvent pas être représentés par des évaluations de fonctions la programmation fonctionnelle ne les admet pas

Programmation réactive

#BzhCmp

Paradigme consistant a représenter un programme comme un ensemble de flux de données asynchrones émise par des source vers des observeurs.

Reactive Extensions

Projet Open Source initié par Microsoft en 2012

#BzhCmp

Support de nombreux langages: C#, JavaScript, Ruby, Java

RxJS

"LoDash for event/async"

#BzhCmp

Lib d'outils pour simplifier la manipulation de flux de données asynchrones (Observables)

Asynchrone

Network (Http, WebSocket)

#BzhCmp

User Interactions (click, scroll, keyboard)

Animations

Web Workers

Callback

#BzhCmp

document.addEventListener('click', (event) => {
    // Trigger when user
})


import express from 'express'
const app = express()
app.get('/index', (request, response, next) => {
    // Trigger when a request income on /index router
})

Callback

#BzhCmp

loadData('users', { id: 1 }, (user) => {
    loadData('accounts', { id: user.account }, (account) => {
        loadData('billing', { id: account.billing }, (billing) => {
            doStuff({ user, account, billing })
        })
    })
})

Promise

#BzhCmp

Exécution garantie (impossible d'annuler)

Résolution unique

Immutable

Cache

Promise

#BzhCmp

loadData('users', { id: 1 })
    .then((user) => loadData('accounts', user.accountId))
    .then((account) => loadData('billing', account.billingId))
    .then((billing) => doStuff(billing))

Promise

Network (Http, WebSocket)

#BzhCmp

User Interactions (click, scroll, keyboard)

Animations

Web Workers

Quelques liens

#BzhCmp

Questions?

#BzhCmp