जावास्क्रिप्ट इफेक्ट टाइप्स आणि साईड इफेक्ट ट्रॅकिंगचा सखोल अभ्यास, विश्वसनीय आणि देखरेख करण्यायोग्य ॲप्लिकेशन्स तयार करण्यासाठी स्टेट आणि असिंक्रोनस ऑपरेशन्स व्यवस्थापित करण्याची सर्वसमावेशक माहिती.
जावास्क्रिप्ट इफेक्ट टाइप्स: मजबूत ॲप्लिकेशन्ससाठी साईड इफेक्ट ट्रॅकिंगमध्ये प्रभुत्व मिळवणे
जावास्क्रिप्ट डेव्हलपमेंटच्या जगात, मजबूत आणि देखरेख करण्यायोग्य ॲप्लिकेशन्स तयार करण्यासाठी साईड इफेक्ट्स कसे व्यवस्थापित करावेत याची सखोल माहिती असणे आवश्यक आहे. साईड इफेक्ट्स, थोडक्यात, असे ऑपरेशन्स आहेत जे सध्याच्या फंक्शनच्या स्कोपबाहेरील स्टेटमध्ये बदल करतात किंवा बाह्य वातावरणाशी संवाद साधतात. यामध्ये ग्लोबल व्हेरिएबल अपडेट करण्यापासून ते एपीआय कॉल करण्यापर्यंत काहीही समाविष्ट असू शकते. वास्तविक जगातील ॲप्लिकेशन्स तयार करण्यासाठी साईड इफेक्ट्स आवश्यक असले तरी, ते गुंतागुंत वाढवू शकतात आणि तुमच्या कोडबद्दल तर्क करणे कठीण करू शकतात. हा लेख इफेक्ट टाइप्सची संकल्पना आणि तुमच्या जावास्क्रिप्ट प्रोजेक्ट्समध्ये साईड इफेक्ट्स प्रभावीपणे कसे ट्रॅक आणि व्यवस्थापित करावे हे स्पष्ट करेल, ज्यामुळे कोड अधिक अंदाजे आणि चाचणी करण्यायोग्य बनेल.
जावास्क्रिप्टमधील साईड इफेक्ट्स समजून घेणे
इफेक्ट टाइप्समध्ये जाण्यापूर्वी, साईड इफेक्ट्स म्हणजे काय हे स्पष्टपणे परिभाषित करूया. जेव्हा एखादे फंक्शन किंवा एक्सप्रेशन त्याच्या लोकल स्कोपबाहेरील काही स्टेटमध्ये बदल करते किंवा बाहेरील जगाशी संवाद साधते, तेव्हा साईड इफेक्ट होतो. जावास्क्रिप्टमधील सामान्य साईड इफेक्ट्सच्या उदाहरणांमध्ये खालील गोष्टींचा समावेश आहे:
- ग्लोबल व्हेरिएबलमध्ये बदल करणे.
- एचटीटीपी (HTTP) रिक्वेस्ट करणे (उदा. एपीआय (API) वरून डेटा आणणे).
- कन्सोलवर लिहिणे (उदा.
console.log
वापरणे). - डीओएम (DOM - Document Object Model) अपडेट करणे.
- टाइमर सेट करणे (उदा.
setTimeout
किंवाsetInterval
वापरणे). - युझर इनपुट वाचणे.
- रँडम नंबर तयार करणे.
बहुतेक ॲप्लिकेशन्समध्ये साईड इफेक्ट्स टाळता येत नसले तरी, अनियंत्रित साईड इफेक्ट्समुळे अनपेक्षित वर्तन, अवघड डीबगिंग आणि वाढलेली गुंतागुंत होऊ शकते. म्हणून, त्यांचे प्रभावीपणे व्यवस्थापन करणे महत्त्वाचे आहे.
इफेक्ट टाइप्सची ओळख
इफेक्ट टाइप्स हे फंक्शन निर्माण करू शकणाऱ्या साईड इफेक्ट्सच्या प्रकारांचे वर्गीकरण आणि ट्रॅक करण्याचा एक मार्ग आहे. एखाद्या फंक्शनचे इफेक्ट टाइप्स स्पष्टपणे घोषित करून, ते फंक्शन काय करते आणि ते तुमच्या ॲप्लिकेशनच्या उर्वरित भागाशी कसे संवाद साधते हे समजणे सोपे होते. ही संकल्पना अनेकदा फंक्शनल प्रोग्रामिंग पॅराडाइम्सशी संबंधित आहे.
थोडक्यात, इफेक्ट टाइप्स हे ॲनोटेशन्स किंवा मेटाडेटासारखे आहेत जे फंक्शनमुळे होणाऱ्या संभाव्य साईड इफेक्ट्सचे वर्णन करतात. ते डेव्हलपर आणि कंपाइलर (स्टॅटिक टाइप चेकिंग असलेल्या भाषेचा वापर करत असल्यास) दोघांनाही फंक्शनच्या वर्तनाबद्दल सिग्नल म्हणून काम करतात.
इफेक्ट टाइप्स वापरण्याचे फायदे
- सुधारित कोड स्पष्टता: इफेक्ट टाइप्समुळे फंक्शन कोणते साईड इफेक्ट्स निर्माण करू शकते हे स्पष्ट होते, ज्यामुळे कोडची वाचनीयता आणि देखभालक्षमता सुधारते.
- वर्धित डीबगिंग: संभाव्य साईड इफेक्ट्स जाणून घेतल्यास, तुम्ही बग्स आणि अनपेक्षित वर्तनाचे मूळ अधिक सहजपणे शोधू शकता.
- वाढलेली चाचणीक्षमता: जेव्हा साईड इफेक्ट्स स्पष्टपणे घोषित केले जातात, तेव्हा फंक्शन्सना स्वतंत्रपणे मॉक करणे आणि चाचणी करणे सोपे होते.
- कंपाइलर सहाय्य: स्टॅटिक टाइप चेकिंग असलेल्या भाषा इफेक्ट टाइप्सचा वापर निर्बंध लागू करण्यासाठी आणि कंपाइल वेळेत विशिष्ट प्रकारचे एरर्स टाळण्यासाठी करू शकतात.
- उत्तम कोड ऑर्गनायझेशन: इफेक्ट टाइप्स तुम्हाला तुमचा कोड अशा प्रकारे संरचित करण्यात मदत करू शकतात ज्यामुळे साईड इफेक्ट्स कमी होतात आणि मॉड्युलॅरिटीला प्रोत्साहन मिळते.
जावास्क्रिप्टमध्ये इफेक्ट टाइप्स लागू करणे
जावास्क्रिप्ट, एक डायनॅमिकली टाइप्ड भाषा असल्याने, हॅस्केल किंवा एल्म सारख्या स्टॅटिकली टाइप्ड भाषांप्रमाणे मूळतः इफेक्ट टाइप्सना समर्थन देत नाही. तथापि, आपण विविध तंत्रे आणि लायब्ररी वापरून इफेक्ट टाइप्स लागू करू शकतो.
१. डॉक्युमेंटेशन आणि कन्व्हेन्शन्स
सर्वात सोपा मार्ग म्हणजे फंक्शनचे इफेक्ट टाइप्स दर्शविण्यासाठी डॉक्युमेंटेशन आणि नामकरण कन्व्हेन्शन्सचा वापर करणे. उदाहरणार्थ, फंक्शन निर्माण करू शकणाऱ्या साईड इफेक्ट्सचे वर्णन करण्यासाठी तुम्ही JSDoc कमेंट्स वापरू शकता.
/**
* API एंडपॉइंटवरून डेटा आणतो.
*
* @effect HTTP - एक HTTP रिक्वेस्ट करतो.
* @effect Console - कन्सोलवर लिहितो.
*
* @param {string} url - ज्या URL वरून डेटा आणायचा आहे.
* @returns {Promise} - डेटাসহ रिझॉल्व्ह होणारे एक प्रॉमिस.
*/
async function fetchData(url) {
console.log(`Fetching data from ${url}...`);
const response = await fetch(url);
const data = await response.json();
return data;
}
हा दृष्टिकोन डेव्हलपरच्या शिस्तीवर अवलंबून असला तरी, तुमच्या कोडमधील साईड इफेक्ट्स समजून घेण्यासाठी आणि डॉक्युमेंट करण्यासाठी हा एक उपयुक्त प्रारंभ बिंदू असू शकतो.
२. स्टॅटिक टायपिंगसाठी टाइपस्क्रिप्टचा वापर
टाइपस्क्रिप्ट, जावास्क्रिप्टचा एक सुपरसेट, भाषेमध्ये स्टॅटिक टायपिंग जोडतो. टाइपस्क्रिप्टमध्ये इफेक्ट टाइप्ससाठी स्पष्ट समर्थन नसले तरी, तुम्ही साईड इफेक्ट्स मॉडेल आणि ट्रॅक करण्यासाठी त्याच्या टाइप सिस्टमचा वापर करू शकता.
उदाहरणार्थ, तुम्ही एक टाइप परिभाषित करू शकता जो फंक्शन निर्माण करू शकणाऱ्या संभाव्य साईड इफेक्ट्सचे प्रतिनिधित्व करतो:
type Effect = "HTTP" | "Console" | "DOM";
type Effectful = {
value: T;
effects: E[];
};
async function fetchData(url: string): Promise> {
console.log(`Fetching data from ${url}...`);
const response = await fetch(url);
const data = await response.json();
return { value: data, effects: ["HTTP", "Console"] };
}
हा दृष्टिकोन तुम्हाला कंपाइल वेळेत फंक्शनच्या संभाव्य साईड इफेक्ट्सचा मागोवा घेण्यास अनुमती देतो, ज्यामुळे तुम्हाला एरर्स लवकर पकडण्यास मदत होते.
३. फंक्शनल प्रोग्रामिंग लायब्ररीज
fp-ts
आणि Ramda
सारख्या फंक्शनल प्रोग्रामिंग लायब्ररीज अधिक नियंत्रित आणि अंदाजे पद्धतीने साईड इफेक्ट्स व्यवस्थापित करण्यासाठी साधने आणि ॲब्स्ट्रॅक्शन्स प्रदान करतात. या लायब्ररीज अनेकदा साईड इफेक्ट्स एन्कॅप्स्युलेट आणि कंपोझ करण्यासाठी मोनाड्स आणि फक्टर्स सारख्या संकल्पना वापरतात.
उदाहरणार्थ, तुम्ही fp-ts
मधील IO
मोनाडचा वापर अशा गणनेचे प्रतिनिधित्व करण्यासाठी करू शकता ज्यात साईड इफेक्ट्स असू शकतात:
import { IO } from 'fp-ts/IO'
const logMessage = (message: string): IO => new IO(() => console.log(message))
const program: IO = logMessage('Hello, world!')
program.run()
IO
मोनाड तुम्हाला साईड इफेक्ट्सची अंमलबजावणी तोपर्यंत विलंब लावू देतो जोपर्यंत तुम्ही स्पष्टपणे run
मेथडला कॉल करत नाही. हे अधिक नियंत्रित पद्धतीने साईड इफेक्ट्सची चाचणी आणि कंपोझिंगसाठी उपयुक्त ठरू शकते.
४. RxJS सह रिॲक्टिव्ह प्रोग्रामिंग
RxJS सारख्या रिॲक्टिव्ह प्रोग्रामिंग लायब्ररीज असिंक्रोनस डेटा स्ट्रीम्स आणि साईड इफेक्ट्स व्यवस्थापित करण्यासाठी शक्तिशाली साधने प्रदान करतात. RxJS डेटा स्ट्रीम्सचे प्रतिनिधित्व करण्यासाठी ऑब्झरव्हेबल्स आणि त्या स्ट्रीम्समध्ये परिवर्तन आणि संयोजन करण्यासाठी ऑपरेटर्स वापरते.
तुम्ही साईड इफेक्ट्स ऑब्झरव्हेबल्समध्ये एन्कॅप्स्युलेट करण्यासाठी आणि त्यांना घोषणात्मक पद्धतीने व्यवस्थापित करण्यासाठी RxJS वापरू शकता. उदाहरणार्थ, तुम्ही एचटीटीपी रिक्वेस्ट करण्यासाठी आणि प्रतिसाद हाताळण्यासाठी ajax
ऑपरेटर वापरू शकता:
import { ajax } from 'rxjs/ajax';
const data$ = ajax('/api/data');
data$.subscribe(
data => console.log('data: ', data),
error => console.error('error: ', error)
);
RxJS एरर्स, रिट्राइज आणि इतर सामान्य साईड इफेक्ट परिस्थिती हाताळण्यासाठी ऑपरेटर्सचा एक समृद्ध संच प्रदान करते.
साईड इफेक्ट्स व्यवस्थापित करण्यासाठी रणनीती
इफेक्ट टाइप्स वापरण्यापलीकडे, तुमच्या जावास्क्रिप्ट ॲप्लिकेशन्समध्ये साईड इफेक्ट्स व्यवस्थापित करण्यासाठी तुम्ही अनेक सामान्य रणनीती वापरू शकता.
१. विलगीकरण (Isolation)
साईड इफेक्ट्स शक्य तितके वेगळे करा. याचा अर्थ साईड इफेक्ट-उत्पादक कोड शुद्ध फंक्शन्सपासून (फंक्शन्स जे समान इनपुटसाठी नेहमी समान आउटपुट देतात आणि त्यांचे कोणतेही साईड इफेक्ट्स नसतात) वेगळे ठेवणे. साईड इफेक्ट्स वेगळे करून, तुम्ही तुमचा कोड चाचणीसाठी आणि समजण्यासाठी सोपा बनवू शकता.
२. डिपेंडन्सी इंजेक्शन
साईड इफेक्ट्स अधिक चाचणी करण्यायोग्य बनवण्यासाठी डिपेंडन्सी इंजेक्शन वापरा. साईड इफेक्ट्स निर्माण करणाऱ्या डिपेंडन्सीज (उदा. window
, document
, किंवा डेटाबेस कनेक्शन) हार्डकोड करण्याऐवजी, त्यांना तुमच्या फंक्शन्स किंवा कंपोनंट्सना आर्ग्युमेंट्स म्हणून पास करा. यामुळे तुम्हाला तुमच्या चाचण्यांमध्ये त्या डिपेंडन्सीज मॉक करता येतात.
function updateTitle(newTitle, dom) {
dom.title = newTitle;
}
// वापर:
updateTitle('My New Title', document);
// चाचणीमध्ये:
const mockDocument = { title: '' };
updateTitle('My New Title', mockDocument);
expect(mockDocument.title).toBe('My New Title');
३. अपरिवर्तनीयता (Immutability)
अपरिवर्तनीयता स्वीकारा. विद्यमान डेटा स्ट्रक्चर्समध्ये बदल करण्याऐवजी, इच्छित बदलांसह नवीन तयार करा. हे अनपेक्षित साईड इफेक्ट्स टाळण्यास मदत करू शकते आणि तुमच्या ॲप्लिकेशनच्या स्थितीबद्दल तर्क करणे सोपे करू शकते. Immutable.js सारख्या लायब्ररीज तुम्हाला अपरिवर्तनीय डेटा स्ट्रक्चर्ससोबत काम करण्यास मदत करू शकतात.
४. स्टेट मॅनेजमेंट लायब्ररीज
ॲप्लिकेशन स्टेटचे केंद्रीकृत आणि अंदाजे पद्धतीने व्यवस्थापन करण्यासाठी Redux, Vuex, किंवा Zustand सारख्या स्टेट मॅनेजमेंट लायब्ररीज वापरा. या लायब्ररीज सामान्यतः स्टेटमधील बदल ट्रॅक करण्यासाठी आणि साईड इफेक्ट्स व्यवस्थापित करण्यासाठी यंत्रणा प्रदान करतात.
उदाहरणार्थ, Redux ॲक्शन्सच्या प्रतिसादात ॲप्लिकेशन स्टेट अपडेट करण्यासाठी रिड्यूसर वापरते. रिड्यूसर हे शुद्ध फंक्शन्स आहेत जे मागील स्टेट आणि एक ॲक्शन इनपुट म्हणून घेतात आणि नवीन स्टेट परत करतात. साईड इफेक्ट्स सामान्यतः मिडलवेअरमध्ये हाताळले जातात, जे ॲक्शन्सना इंटरसेप्ट करू शकतात आणि असिंक्रोनस ऑपरेशन्स किंवा इतर साईड इफेक्ट्स करू शकतात.
५. एरर हँडलिंग
अनपेक्षित साईड इफेक्ट्स योग्यरित्या हाताळण्यासाठी मजबूत एरर हँडलिंग लागू करा. अपवाद पकडण्यासाठी try...catch
ब्लॉक्स वापरा आणि युझरला अर्थपूर्ण एरर संदेश द्या. प्रोडक्शनमधील एरर्सचे निरीक्षण आणि लॉग करण्यासाठी सेंट्री (Sentry) सारख्या एरर ट्रॅकिंग सेवा वापरण्याचा विचार करा.
६. लॉगिंग आणि मॉनिटरिंग
तुमच्या ॲप्लिकेशनच्या वर्तनाचा मागोवा घेण्यासाठी आणि संभाव्य साईड इफेक्ट समस्या ओळखण्यासाठी लॉगिंग आणि मॉनिटरिंग वापरा. तुमचे ॲप्लिकेशन कसे वागत आहे हे समजून घेण्यासाठी आणि उद्भवणाऱ्या कोणत्याही समस्यांचे डीबगिंग करण्यासाठी महत्त्वाच्या घटना आणि स्टेटमधील बदल लॉग करा. Google Analytics किंवा कस्टम लॉगिंग सोल्यूशन्स सारखी साधने उपयुक्त ठरू शकतात.
वास्तविक-जगातील उदाहरणे
चला, वेगवेगळ्या परिस्थितीत इफेक्ट टाइप्स आणि साईड इफेक्ट व्यवस्थापन धोरणे कशी लागू करावी याची काही वास्तविक-जगातील उदाहरणे पाहूया.
१. एपीआय कॉलसह रिॲक्ट कंपोनंट
import React, { useState, useEffect } from 'react';
function UserProfile({ userId }) {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
async function fetchUser() {
try {
const response = await fetch(`/api/users/${userId}`);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
setUser(data);
} catch (e) {
setError(e);
} finally {
setLoading(false);
}
}
fetchUser();
}, [userId]);
if (loading) {
return Loading...
;
}
if (error) {
return Error: {error.message}
;
}
return (
{user.name}
Email: {user.email}
);
}
export default UserProfile;
या उदाहरणात, UserProfile
कंपोनंट युझर डेटा आणण्यासाठी एपीआय कॉल करतो. साईड इफेक्ट useEffect
हुकमध्ये एन्कॅप्स्युलेट केलेला आहे. एरर हँडलिंग try...catch
ब्लॉक वापरून लागू केले आहे. युझरला फीडबॅक देण्यासाठी लोडिंग स्टेट useState
वापरून व्यवस्थापित केले आहे.
२. डेटाबेस इंटरॅक्शनसह Node.js सर्व्हर
const express = require('express');
const mongoose = require('mongoose');
const app = express();
const port = 3000;
mongoose.connect('mongodb://localhost:27017/mydatabase', {
useNewUrlParser: true,
useUnifiedTopology: true
});
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log('Connected to MongoDB');
});
const userSchema = new mongoose.Schema({
name: String,
email: String
});
const User = mongoose.model('User', userSchema);
app.get('/users', async (req, res) => {
try {
const users = await User.find({});
res.json(users);
} catch (err) {
console.error(err);
res.status(500).send('Server error');
}
});
app.listen(port, () => {
console.log(`Server listening at http://localhost:${port}`);
});
हे उदाहरण MongoDB डेटाबेसशी संवाद साधणारा Node.js सर्व्हर दर्शवते. साईड इफेक्ट्समध्ये डेटाबेसशी कनेक्ट करणे, डेटाबेसची क्वेरी करणे आणि क्लायंटला प्रतिसाद पाठवणे यांचा समावेश आहे. एरर हँडलिंग try...catch
ब्लॉक्स वापरून लागू केले आहे. डेटाबेस कनेक्शन आणि सर्व्हर स्टार्टअपचे निरीक्षण करण्यासाठी लॉगिंग वापरले जाते.
३. लोकल स्टोरेजसह ब्राउझर एक्सटेंशन
// background.js
chrome.runtime.onInstalled.addListener(() => {
chrome.storage.sync.set({ color: '#3aa757' }, () => {
console.log('Default background color set to #3aa757');
});
});
chrome.action.onClicked.addListener((tab) => {
chrome.scripting.executeScript({
target: { tabId: tab.id },
function: setPageBackgroundColor
});
});
function setPageBackgroundColor() {
chrome.storage.sync.get('color', ({ color }) => {
document.body.style.backgroundColor = color;
});
}
हे उदाहरण वेबपेजचा बॅकग्राउंड कलर बदलणारे एक साधे ब्राउझर एक्सटेंशन दाखवते. साईड इफेक्ट्समध्ये ब्राउझरच्या स्टोरेज एपीआय (chrome.storage
) शी संवाद साधणे आणि डीओएममध्ये (document.body.style.backgroundColor
) बदल करणे यांचा समावेश आहे. एक्सटेंशन इन्स्टॉल झाल्यावर बॅकग्राउंड स्क्रिप्ट ऐकते आणि लोकल स्टोरेजमध्ये डीफॉल्ट कलर सेट करते. जेव्हा एक्सटेंशनच्या आयकॉनवर क्लिक केले जाते, तेव्हा ते एक स्क्रिप्ट कार्यान्वित करते जे लोकल स्टोरेजमधून कलर वाचते आणि सध्याच्या पेजवर लागू करते.
निष्कर्ष
मजबूत आणि देखरेख करण्यायोग्य जावास्क्रिप्ट ॲप्लिकेशन्स तयार करण्यासाठी इफेक्ट टाइप्स आणि साईड इफेक्ट ट्रॅकिंग या अत्यावश्यक संकल्पना आहेत. साईड इफेक्ट्स काय आहेत, त्यांचे वर्गीकरण कसे करावे आणि त्यांचे प्रभावीपणे व्यवस्थापन कसे करावे हे समजून घेऊन, तुम्ही असा कोड लिहू शकता जो चाचणी करणे, डीबग करणे आणि समजणे सोपे आहे. जावास्क्रिप्ट मूळतः इफेक्ट टाइप्सना समर्थन देत नसले तरी, तुम्ही डॉक्युमेंटेशन, टाइपस्क्रिप्ट, फंक्शनल प्रोग्रामिंग लायब्ररीज आणि रिॲक्टिव्ह प्रोग्रामिंग लायब्ररीजसह विविध तंत्रे आणि लायब्ररीज वापरून ते लागू करू शकता. विलगीकरण, डिपेंडन्सी इंजेक्शन, अपरिवर्तनीयता आणि स्टेट मॅनेजमेंट यांसारख्या धोरणांचा अवलंब केल्याने साईड इफेक्ट्स नियंत्रित करण्याची आणि उच्च-गुणवत्तेचे ॲप्लिकेशन्स तयार करण्याची तुमची क्षमता आणखी वाढू शकते.
जावास्क्रिप्ट डेव्हलपर म्हणून तुमचा प्रवास सुरू ठेवताना, लक्षात ठेवा की साईड इफेक्ट व्यवस्थापनावर प्रभुत्व मिळवणे हे एक महत्त्वाचे कौशल्य आहे जे तुम्हाला जटिल आणि विश्वसनीय सिस्टीम तयार करण्यास सक्षम करेल. या तत्त्वांचा आणि तंत्रांचा स्वीकार करून, तुम्ही असे ॲप्लिकेशन्स तयार करू शकता जे केवळ कार्यक्षमच नाहीत तर देखरेख करण्यायोग्य आणि स्केलेबल देखील आहेत.
पुढील शिक्षण
- जावास्क्रिप्टमध्ये फंक्शनल प्रोग्रामिंग: फंक्शनल प्रोग्रामिंग संकल्पना आणि त्या जावास्क्रिप्ट डेव्हलपमेंटमध्ये कशा लागू होतात याचा शोध घ्या.
- RxJS सह रिॲक्टिव्ह प्रोग्रामिंग: असिंक्रोनस डेटा स्ट्रीम्स आणि साईड इफेक्ट्स व्यवस्थापित करण्यासाठी RxJS कसे वापरावे ते शिका.
- स्टेट मॅनेजमेंट लायब्ररीज: Redux, Vuex, आणि Zustand सारख्या विविध स्टेट मॅनेजमेंट लायब्ररीजचा अभ्यास करा.
- टाइपस्क्रिप्ट डॉक्युमेंटेशन: टाइपस्क्रिप्टच्या टाइप सिस्टममध्ये अधिक खोलवर जा आणि साईड इफेक्ट्स मॉडेल आणि ट्रॅक करण्यासाठी त्याचा कसा वापर करायचा ते शिका.
- fp-ts लायब्ररी: टाइपस्क्रिप्टमध्ये फंक्शनल प्रोग्रामिंगसाठी fp-ts लायब्ररीचा शोध घ्या.