Programmation Reactive
Programmation Réactive Fonctionnelle (PRF)
Programmation réactive = programmation avec des flux de données asynchrones.
Un flux est une séquence d’événements en cours de production et ordonnés dans le temps.
Rien de nouveau : Les bus d’événements et les événements type clics de souris sont simplement des flux d’événements asynchrones que l’on peut observer pour y réagir.
La PR, c’est la même idée mais survitaminée. Il devient possible de créer des flux à partir de tout et n’importe quoi, pas seulement de clics. Ces flux sont légers et présents de partout. Tout peut alors être un flux : les variables, les entrées utilisateurs, les propriétés, les caches, les structures de données, etc.
est alors possible d’écouter/observer ce flux et réagir aux changements.
En plus de ça, il y a à votre disposition des boîtes à outils puissantes pour combiner, créer, filtrer tous ces flux. C’est là que la partie « fonctionnelle » se combine bien avec la PR. Un flux peut être utilisé comme entrée d’un autre. Plusieurs flux peuvent aussi être combinés pour en produire un nouveau. Deux flux peuvent être fusionnés. Un flux peut être filtré pour produire un nouveau flux avec uniquement les événements qui vous intéressent. Vous pouvez transformer chaque événement d’un flux pour en produire un nouveau.
C’est là que la partie « fonctionnelle » se combine bien avec la PR. Un flux peut être utilisé comme entrée d’un autre. Plusieurs flux peuvent aussi être combinés pour en produire un nouveau. Deux flux peuvent être fusionnés. Un flux peut être filtré pour produire un nouveau flux avec uniquement les événements qui vous intéressent. Vous pouvez transformer chaque événement d’un flux pour en produire un nouveau.
L’idée est de traiter ces événements de manière asynchrone, en définissant une fonction à exécuter pour chaque valeur émise, une autre fonction à exécuter en cas d’erreur et une dernière pour le cas du signal de « fin ».
Dans certains cas particuliers, les deux dernières sont inutiles et il est suffisant de se concentrer sur la fonction qui traite les valeurs. Écouter un flux (listening), se dit aussi « souscrire au flux » (subscribing). En fait les fonction que l’on définit sont des observateurs et le sujet (objet observé) est le flux. C’est exactement le patron de conception observateur.
Dans les bibliothèque de programmation réactive fonctionnelle, il existe plein de fonctions pour manipuler les flux. Quand on appelle une de ces fonctions, cela renvoie un nouveau flux qui découle du premier. Le flux d’origine n’est pas modifié du tout. Cette propriété de non-modification est appelée « immutabilité » et est une des bases de la programmation fonctionnelle. Comme un nouveau flux est créé, il est possible de chaîner les appels,
La PR fonctionnelle élève le niveau d’abstraction de votre code et, au lieu de se battre avec des détails d’implantation, vous pouvez vous concentrer sur les interdépendances entre les événements de votre logique métier. Un code de PR fonctionnelle est très souvent plus concis, ce qui peut avoir certains avantages.
Ref : http://home.heeere.com/tech-intro-programmation-reactive.html
cela renvoie un nouveau flux qui découle du premier. Le flux d’origine n’est pas modifié du tout. Cette propriété de non-modification est appelée « immutabilité » et est une des bases de la programmation fonctionnelle. Comme un nouveau flux est créé, il est possible de chaîner les appels, par
La fonction Rx.Observable.create() crée un flux qui informera chaque observateur de chaque nouvel événement (onNext()) et des erreurs (onError()).
Operations:
map (pour transformer chaque valeur),
filter (pour filtrer certaines valeurs),
scan (pour appliquer successivement une opération),
stream.throttle(250ms)
- Language (Thread, reference value)
http://stackoverflow.com/questions/2734025/is-javascript-guaranteed-to-be-single-threaded
JavaScript (in browsers) doesn’t run concurrently2. At most one of the setTimeout callbacks can execute at a time - as there is one JavaScript execution context or “thread”.
Passage par valeur ou par référence ?
Variables are passed by value, objects by reference. Arrays in JavaScript are objects
Les objets simples comme String, Boolean, Number sont aussi passés par valeur.
Pour mémoire, un argument passé par valeur est copié, et c’est la copie qui est refilée à la fonction. Toute modification de cette copie n’entraîne donc aucun changement dans la donnée d’origine. En revanche, un argument passé par référence est refilé directement : la fonction travaille sur l’original.
Mais en Javascript, ce n’est pas vous qui choisissez le mode de passage ; ça fonctionne un peu comme en Java[1] : si c’est un type natif (Number, String, etc.) c’est passé par valeur, tandis que si c’est un objet d’une classe à vous, c’est passé par référence.