Rien que ça !!!!
Après mon petit article sur le pattern Foncteur en java (ICI) il y a une idée qui me trotte dans la tête depuis quelques jours.
Le functional reactive programming, comment ça marche ? Et surtout, cela peu-t-il fonctionner en Java ?
Du coup, je me suis décidé à lancer mon petit IDE préféré et zou, j'ai tenté l'aventure. J'ai écrit ma petite librairie et voici comment l'utiliser :
Voici un exemple qui fait la chose suivante : Une évènement sur le mouvement et le click de la souris mais qui ce déclenchent que toutes les 250 milli secondes. Je veux également que cet évènement prenne fin au bout de 2 secondes. (rien que l'énoncé, avec les évènements traditionnels, ça fait pâlir).
Voici concrètement ce que cela donne :
Voilà comment utiliser la dite librairie. Pas mal non ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 final React myReact = new MouseReact() .move() .merge(new MouseReact().click()) .filter(new Function<Boolean, Arguments1<React>>() { @Override public Boolean invoke(Arguments1<React> arguments) { React r = arguments.getArgument1(); return (r.getTimeElapsed() > 250L); } }) .onReact(new Procedure<Arguments1<React>>() { @Override public void invoke(Arguments1<React> arguments) { MouseReact r = (MouseReact) arguments.getArgument1(); log("REACT move & click every 250 milli ! " + r.count() + " " + r.getTimeElapsedFromStart()); } }); new React().once(2000L).onReact(new Procedure<Arguments1<React>>() { @Override public void invoke(Arguments1<React> arguments) { log("REACT until 2 seconds "); myReact.dispose(); } });
Il faut voir cela comme un map/filter/reduce, mais appliqué aux évènements et aux threads (ce qu'il y a dans la librairie en réalité), le tout architecturé sur des monades (encore un truc issu du fonctionnel).
Maintenant, j'aimerai vos avis sur la chose, vos idées.
Je suis en train de me demander si je ne ferai pas un article sur la FRP en java dans la même veine que sur les foncteurs....
Voilà, toute idée est la bienvenue.
Partager