Tra le librerie di coding funzionali, fp-ts si è guadagnata popolarità concentrandosi su mapping e monadi funzionali, ma con l'integrazione in Effect si è evoluta in un framework.
A differenza delle librerie esistenti, Effect funziona come un framework e richiede una conoscenza specifica per l'utilizzo degli oggetti Effect.
Effect utilizza oggetti racchiusi in Effect, in modo simile agli Observable di RxJs, e si prevede che possa stabilire un nuovo standard nel settore Node.js.
Negli ultimi anni, la programmazione funzionale è stata piuttosto popolare.
L'orientamento agli oggetti fornisce la struttura,
mentre la programmazione funzionale ha portato alla semplificazione del codice dettagliato.
Naturalmente, la popolarità della programmazione funzionale tende a verificarsi in cicli di alcuni anni.
In linea con questa tendenza, sono iniziate a comparire diverse librerie.
Le librerie possono essere utilizzate semplicemente importandole, a condizione che la loro API sia ben esposta, mentre i framework richiedono una certa familiarità con il pacchetto stesso.
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
*/
Questo Effectinvece di essere avvolto in Observable come in RxJs, è avvolto in Effect, e questi oggetti vengono spostati in giro,
come se fosse la parola chiave async che si diffonde.
Per utilizzare gli oggetti Effect , le funzioni che li utilizzano devono anch'esse diventare Effect.
Proprio come program nel codice sopra.
Certo, ci sono alcune funzioni che possono essere utilizzate come punto di ingresso, ma non sono così attraenti.
Ad ogni modo, la forma e la pulizia di Effectnel suo ruolo di framework, potrebbe portare una ventata di aria fresca e nuovi standard nel mondo Node. Io personalmente nutro grandi aspettative.