Parmi les bibliothèques de codage fonctionnel, fp-ts s'est fait connaître en mettant l'accent sur les mappings et les monades fonctionnels, mais son intégration à Effect l'a transformé en un framework.
Contrairement aux bibliothèques existantes, Effect fonctionne comme un framework et nécessite une connaissance spécifique pour utiliser les objets Effect.
Effect utilise des objets encapsulés dans Effect, à l'instar des Observable de RxJs, et pourrait potentiellement établir une nouvelle norme dans le secteur de Node.js.
La programmation fonctionnelle a été très à la mode ces dernières années.
L'orienté objet crée la structure, tandis que
la programmation fonctionnelle a permis de simplifier le code en détail.
Bien sûr, la popularité de la programmation fonctionnelle suit des cycles de quelques années.
En raison de cette popularité, diverses bibliothèques ont commencé à apparaître.
Pour moi, FxTsn'était qu'une boîte à outils utilisant des générateurs pour créer une évaluation paresseuse.
lodashdonnait également une forte impression de boîte à outils.
Bien sûr, ces boîtes à outils aident à la programmation déclarative.
Mais ce que nous recherchions dans la programmation fonctionnelle n'était pas cela, mais des concepts comme les mappages, les correspondances, les monades, et encore plus de monades.
fp-tscorrespondait à cette attente, et son mainteneur était également passionné par la programmation fonctionnelle.
Cependant, il y a quelques mois, j'ai appris que cette bibliothèque avait été fusionnée avecEffect.
J'ai donc vérifié Effect, et j'ai constaté que quelque chose avait changé.
Si fp-tsressemblait à une bibliothèque, Effectse rapprochait davantage d'un framework.
Pour utiliser Effect, il faut avoir des connaissances de base sur Effect.
NestJs et NextJsnécessitent également une compréhension de leur fonctionnement.
Une bibliothèque, si son API est bien exposée, peut être utilisée directement, mais un framework nécessite une compréhension du package en question.
import{Effect,Console}from"effect"let i =1const expensiveTask =Effect.promise(()=>{console.log("expensive task...")returnnewPromise((resolve)=>{setTimeout(()=>{resolve(result ${i++})},100)});})const program =Effect.gen(function*(){console.log("non-cached version:")yield* expensiveTask.pipe(Effect.andThen(Console.log))yield* expensiveTask.pipe(Effect.andThen(Console.log))console.log("cached version:")const cached =yield*Effect.cached(expensiveTask)yield* cached.pipe(Effect.andThen(Console.log))yield* cached.pipe(Effect.andThen(Console.log))})Effect.runFork(program)/*
Output:
non-cached version:
expensive task...
result 1
expensive task...
result 2
cached version:
expensive task...
result 3
result 3
*/
Ce Effectse distingue de RxJscar au lieu d'être enveloppé dans un Observable, il utilise des objets enveloppés dans Effect,
et ces objets se propagent commeasync un peu partout.
Pour utiliser un objet Effect , les fonctions qui l'utilisent doivent également être de type Effect.
Comme la fonction program dans le code ci-dessus.
Bien sûr, il existe des fonctions utilisées comme point d'entrée, mais ce n'est pas très élégant.
Quoi qu'il en soit, la forme et la clarté de Effecten tant que framework lui permettent de proposer une nouvelle approche et une nouvelle norme dans le monde de Node. J'espère qu'il apportera une bouffée d'air frais à l'industrie.