fp-ts जैसी फंक्शनल कोडिंग लाइब्रेरी ने फंक्शनल मैपिंग और मोनाड पर ध्यान केंद्रित करते हुए लोकप्रियता हासिल की, लेकिन इफ़ेक्ट में एकीकृत होने के बाद यह एक फ्रेमवर्क के रूप में बदल गई है।
इफ़ेक्ट पारंपरिक लाइब्रेरी के विपरीत एक फ्रेमवर्क की तरह काम करता है, और इफ़ेक्ट ऑब्जेक्ट का उपयोग करने के लिए संबंधित ज्ञान की आवश्यकता होती है।
इफ़ेक्ट RxJs के Observable की तरह इफ़ेक्ट से लिपटे ऑब्जेक्ट का उपयोग करता है, और यह अनुमान लगाया गया है कि यह Node.js उद्योग में एक नया मानक स्थापित कर सकता है।
पिछले कुछ वर्षों में, कार्यात्मक कोडिंग काफी लोकप्रिय रही है।
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग ढाँचा प्रदान करता है,
जबकि कार्यात्मक कोडिंग कोड की बारीकियों को सरल बनाने पर ध्यान केंद्रित करती है।
बेशक, कार्यात्मक कोडिंग का चलन कुछ वर्षों के चक्र में बार-बार आता है।
इस कार्यात्मक कोडिंग के चलन के साथ, विभिन्न पुस्तकालय सामने आने लगे।
जबकि पहले वाला fp-tsपुस्तकालय के करीब था, यह नया Effectफ़्रेमवर्क के अधिक करीब है।
इस Effectका उपयोग करने के लिए, आपको Effectके बारे में बुनियादी समझ की आवश्यकता है।
NestJsऔर NextJsका उपयोग करने के लिए, आपको उनके बारे में समझ रखनी होगी, ठीक उसी तरह।
पुस्तकालयों को, यदि उनका API अच्छी तरह से उजागर किया गया है, तो उपयोग में लाया जा सकता है। लेकिन फ़्रेमवर्क के लिए, आपको उस पैकेज को समझना होगा।
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
*/
यह Effectजैसा कि RxJsमें Observable के बजाय Effect के साथ ऑब्जेक्ट्स को लपेटा जाता है,
यह async कीवर्ड की तरह संचारित होता है।
Effect ऑब्जेक्ट का उपयोग करने के लिए, उस ऑब्जेक्ट का उपयोग करने वाले फंक्शन को भी Effectहोना चाहिए।
जैसे कि ऊपर दिए गए कोड में program में दिखाया गया है।
हाँ, एंट्री पॉइंट के रूप में इस्तेमाल होने वाले कुछ फंक्शन होते हैं, लेकिन वे उतने आकर्षक नहीं हैं।
किसी भी तरह से, Effectका स्वरूप और साफ़-सफाई इसे एक फ़्रेमवर्क के तौर पर स्थापित करते हैं, और मेरा मानना है कि यह Node समुदाय में एक नया बदलाव और मानक स्थापित करेगा।