Fonksiyonel kodlama kütüphaneleri arasında fp-ts, fonksiyonel eşleme ve monadlara odaklanmasıyla popülerlik kazandı ancak Effect'e entegre olmasıyla birlikte çerçeve niteliğine dönüştü.
Effect, mevcut kütüphanelerden farklı olarak bir çerçeve gibi çalışır ve Effect nesnelerini kullanmak için ilgili bilgiye ihtiyaç duyulur.
Effect, RxJs'deki Observable'lara benzer şekilde Effect ile sarılmış nesneleri kullanır ve Node.js sektöründe yeni bir standart sunma potansiyeline sahip olduğu tahmin ediliyor.
Son birkaç yıldır fonksiyonel programlama oldukça popüler oldu.
Nesne yönelimli programlama yapı oluştururken
fonksiyonel programlama, ayrıntılı kodun özlü olmasını sağladı.
Elbette, fonksiyonel programlamanın popülaritesi birkaç yıllık döngülerle sürekli olarak ortaya çıkıyor.
Bu fonksiyonel programlama trendine bağlı olarak, çeşitli kütüphaneler ortaya çıkmaya başladı.
Benim hissettiğime göre FxTs durumu, gecikmeli değerlendirme oluşturmak için jeneratör kullanan bir araç takımından ibaretti.
lodash da aynı şekilde bir araç takımı hissi veriyordu.
Elbette, bu araç takımları bildirimsal programlama konusunda yardımcı oluyor.
Ancak aradığımız fonksiyonel programlama bu değildi, dönüşüm ve eşleme ve monad, daha fazla monad'dı.
fp-ts bu konuda uygun düşüyordu ve ilgili bakım sorumlusu da fonksiyonel programlamaya gerçekten ilgiliydi.
Ancak birkaç ay önce, söz konusu kütüphanenin Effect ile birleştirildiği haberini aldık.
Bu nedenle Effect incelediğimizde, bir şeylerin farklı olduğunu fark ettik.
Mevcut fp-ts kütüphaneye yakınsa, buradaki Effect daha çok bir çerçeveye benziyordu.
Bu Effect kullanmak için Effect hakkında temel bilgilere ihtiyaç duyuluyordu.
NestJs ve NextJs kullanmak için olduğu gibi, bunları anlamak gerekiyordu.
Kütüphaneler, API'leri iyi şekilde gösteriliyorsa, alınır ve kullanılır, ancak çerçeveler söz konusu paket hakkında bilgi sahibi olmayı gerektirir.
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
*/
Bu Effect, RxJs gibi Observable ile çevrili olmak yerine, Effect ile çevrili nesnelerin dolaştığı
tıpkı async anahtar sözcüğü gibi bulaşmaya devam etti.
Effect nesnesini kullanmak için, bu nesneyi kullanan fonksiyonun da Effect olması gerekiyordu.
Tıpkı yukarıdaki kodda program örneğinde olduğu gibi.
Elbette, giriş noktası olarak kullanılan fonksiyonlar var, ancak bunlar çok çekici değil.
Neyse ki, bu Effect şekli ve temizliği, bir çerçeve olarak rolünü üstlenirken, Node dünyasına yeni bir esinti ve standart getirebilir diye düşünüyorum.