JavaScript में मेटाप्रोग्रामिंग: Proxy, Reflect और Symbol की जादूगरी

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

JavaScript में मेटाप्रोग्रामिंग: जब कोड खुद को लिखता है

\n\n

कल्पना करें कि आप एक ऐसा प्रोग्राम लिख रहे हैं जो रनटाइम के दौरान अपने व्यवहार का विश्लेषण और बदलाव कर सकता है। साइंस फिक्शन लगता है? JavaScript मेटाप्रोग्रामिंग की दुनिया में आपका स्वागत है!

\n\n

यह तकनीक डेवलपर को सामान्य कोड से आगे जाकर ऑब्जेक्ट की संरचना को नियंत्रित करने, फंक्शन कॉल को इंटरसेप्ट करने और यहां तक कि वर्चुअल प्रॉपर्टी बनाने की अनुमति देती है जो मेमोरी में मौजूद नहीं होती। इस लेख में हम मेटाप्रोग्रामिंग के तीन स्तंभों को समझेंगे: Proxy, Reflect और Symbol। आप सीखेंगे कि इनकी मदद से स्मार्ट API कैसे बनाएं, लेज़ी कैलकुलेशन कैसे लागू करें और डेटा को अनजाने बदलावों से कैसे बचाएं।

\n\n

अगर आपने JavaScript की बेसिक्स सीख ली हैं और अब अगले स्तर पर जाना चाहते हैं, तो यह सामग्री आपके लिए है। हम बुनियादी बातों पर समय बर्बाद नहीं करेंगे; सीधे रियल कोड उदाहरणों के साथ एडवांस्ड तकनीकों पर आएंगे।

\n\n

मेटाप्रोग्रामिंग क्या है और इसकी ज़रूरत क्यों है?

\n\n

क्लासिकल प्रोग्रामिंग में हम कोड लिखते हैं जो डेटा पर काम करता है। मेटाप्रोग्रामिंग में हम कोड लिखते हैं जो दूसरे कोड या ऑब्जेक्ट की संरचना पर काम करता है। यह शानदार संभावनाएं देता है:

\n\n
    \n
  • वैलिडेशन और सुरक्षा — स्वचालित रूप से जांचें कि प्रॉपर्टी को कौन से मान असाइन किए जा रहे हैं।
  • \n
  • लॉगिंग और डीबगिंग — ऑब्जेक्ट पर किसी भी ऑपरेशन को इंटरसेप्ट करें और कंसोल में दिखाएं।
  • \n
  • वर्चुअल प्रॉपर्टी — ऐसी प्रॉपर्टी बनाएं जो मौके पर कैलकुलेट होती हैं, मेमोरी नहीं लेतीं।
  • \n
  • DSL (डोमेन-स्पेसिफिक लैंग्वेज) बनाना — jQuery या Vue की तरह कॉल चेन बनाएं।
  • \n
\n\n

JavaScript इसके लिए तीन शक्तिशाली टूल प्रदान करता है। आइए प्रत्येक को समझते हैं।

\n\n

Proxy: ऑब्जेक्ट की दुनिया में आपका निजी जासूस

\n\n

Proxy एक रैपर ऑब्जेक्ट है जो किसी दूसरे ऑब्जेक्ट (टार्गेट ऑब्जेक्ट) पर मौलिक ऑपरेशन को इंटरसेप्ट और बदलने की अनुमति देता है। आप प्रॉपर्टी पढ़ने, लिखने, डिलीट करने, फंक्शन कॉल और यहां तक कि in ऑपरेटर से प्रॉपर्टी की जांच को भी "सुन" सकते हैं।

\n\n

सिंटैक्स सरल है: new Proxy(target, handler), जहां handler एक ऑब्जेक्ट है जिसमें ट्रैप फंक्शन होते हैं।

\n\n

उदाहरण 1: Proxy के साथ डेटा वैलिडेशन

\n\n

मान लीजिए हमारे पास एक यूज़र ऑब्जेक्ट है, और हम चाहते हैं कि उम्र सिर्फ 0 से 120 के बीच का नंबर हो, और नाम एक खाली स्ट्रिंग न हो। Proxy के बिना हर फील्ड के लिए गेटर और सेटर लिखने पड़ते। Proxy के साथ यह आसान है:

\n\n
const user = {\n    name: 'राहुल',\n    age: 25\n};\n\nconst validator = {\n    set(target, property, value) {\n        if (property === 'age') {\n            if (!Number.isInteger(value)) {\n                throw new TypeError('उम्र एक पूर्णांक होनी चाहिए');\n            }\n            if (value < 0 || value > 120) {\n                throw new RangeError('उम्र स्वीकार्य सीमा से बाहर है');\n            }\n        }\n        if (property === 'name') {\n            if (typeof value !== 'string' || value.trim().length === 0) {\n                throw new TypeError('नाम एक खाली स्ट्रिंग नहीं हो सकता');\n            }\n        }\n        // अगर सब ठीक है, वैल्यू सेव करें\n        target[property] = value;\n        return true; // ऑपरेशन सफल है\n    }\n};\n\nconst proxiedUser = new Proxy(user, validator);\n\n// टेस्ट करें\nproxiedUser.age = 30; // OK\nconsole.log(proxiedUser.age); // 30\n\nproxiedUser.age = -5; // एरर: RangeError\nproxiedUser.name = ''; // एरर: TypeError
\n\n

ध्यान दें: हमने असाइनमेंट ऑपरेशन को इंटरसेप्ट किया और अपनी लॉजिक जोड़ी। यह शुद्ध JavaScript मेटाप्रोग्रामिंग है — कोड जो दूसरे कोड के व्यवहार को नियंत्रित करता है।

\n\n

उदाहरण 2: लेज़ी कैलकुलेशन और वर्चुअल प्रॉपर्टी

\n\n

कल्पना करें कि हमारे पास

ब्लॉग

पुस्तक अनुशंसाएँ