Entre las bibliotecas de codificación funcional, fp-ts se hizo popular al centrarse en el mapeo funcional y las mónadas, pero ha evolucionado a un framework al integrarse con Effect.
A diferencia de las bibliotecas existentes, Effect funciona como un framework y se requiere cierto conocimiento para utilizar los objetos Effect.
Effect utiliza objetos encapsulados en Effect, similar a Observable de RxJs, y se espera que establezca un nuevo estándar en la industria de Node.js.
La programación funcional ha estado bastante de moda durante los últimos años.
La orientación a objetos proporciona la estructura,
mientras que la programación funcional ha contribuido a la simplicidad del código detallado.
Por supuesto, la popularidad de la programación funcional tiende a aparecer en ciclos de varios años.
Como resultado de esta tendencia, han comenzado a surgir diversas bibliotecas.
En mi opinión, FxTssimplemente era un conjunto de herramientas que utilizaba generadores para crear la evaluación diferida.
lodash también daba una fuerte impresión de ser un conjunto de herramientas.
Por supuesto, estos conjuntos de herramientas son útiles para la programación declarativa.
Sin embargo, lo que buscábamos en la programación funcional no era eso, sino mapeos, correspondencias, mónadas y aún más mónadas.
fp-ts se ajustaba a esta necesidad, y su mantenedor principal también era un verdadero entusiasta de la programación funcional.
Pero hace unos meses, me enteré de que esta biblioteca se había fusionado con Effect.
Así que revisé Effect, y me di cuenta de que era diferente.
Mientras que fp-ts era más parecido a una biblioteca, esta nueva Effect se asemejaba más a un framework.
Para usar Effect, se necesitaba un conocimiento básico de Effect.
NestJs y NextJs también requerían una comprensión de sus conceptos, de manera similar.
Si bien las bibliotecas solo necesitan una API bien expuesta para su uso, los frameworks requieren un cierto nivel de comprensión del paquete en sí.
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
*/
Este Effect funciona de manera similar a RxJs, pero en lugar de envolver los objetos en Observable, los envuelve en Effect, y estos objetos se desplazan
como si fuera la palabra clave async, propagándose a través del código.
Para utilizar los objetos Effect, las funciones que los utilizan también deben convertirse en Effect.
Al igual que en el código anterior, program.
Por supuesto, existe una función que se utiliza como punto de entrada, pero no es tan elegante.
En cualquier caso, la forma y la limpieza de Effect como framework, muestra un nuevo viento y un nuevo estándar en la industria de Node, y espero que así sea.