अंतिम अद्यतन:2026-10-12
C++ लेज़ी इवैल्यूएशन इडियम¶
सॉफ़्टवेयर विकास में, लेज़ी इवैल्यूएशन (lazy evaluation or call-by-need) एक शक्तिशाली तकनीक है, जो हमें किसी एक्सप्रेशन की गणना को तब तक टालने की अनुमति देती है जब तक वह वास्तव में आवश्यक न हो जाए।
यह तकनीक बड़े पैमाने के डेटा-सेट या गतिशील गणना की आवश्यकता वाली परिस्थितियों में विशेष रूप से उपयोगी है।
1.लेज़ी इवैल्यूएशन क्या है?¶
लेज़ी इवैल्यूएशन का अर्थ है एक्सप्रेशन की गणना को तब तक टालना जब तक वे वास्तव में आवश्यक न हों। इस तकनीक का लाभ यह है कि इससे प्रोग्राम की दक्षता तथा प्रदर्शन बढ़ता है, विशेषतः बड़े डेटा-सेट या गतिशील गणना की स्थिति में।
लेज़ी इवैल्यूएशन का कार्यान्वयन प्रायः फंक्शन कॉल टालकर या एक्सप्रेशन के मूल्यांकन को टालकर किया जाता है। इसका अर्थ है — एक्सप्रेशन की गणना उनके उपयोग के समय तक टाल दी जाती है, न कि उन्हें परिभाषित करते ही तुरंत निष्पादित कर दिया जाता है।
2.कुछ कार्यान्वयन विधियाँ¶
C++ में हमारे पास लेज़ी इवैल्यूएशन कार्यान्वित करने की अनेक विधियाँ हैं। नीचे कुछ सामान्य विधियाँ हैं:
- Lambda एक्सप्रेशन: Lambda एक्सप्रेशन एक अनाम (anonymous) फंक्शन दर्शाने के लिए उपयोग किया जा सकता है, जिससे आवश्यक स्थान पर गणना टाली जा सकती है।
- std::function:
std::functionसे फंक्शन को लपेटा जा सकता है, जिससे फंक्शन का निष्पादन बाद के किसी क्षण तक टाला जा सकता है।
- std::bind:
std::bindसे फंक्शन तथा तर्क बाँधकर एक कॉल करने योग्य (callable) ऑब्जेक्ट बनाया जा सकता है, जिससे फंक्शन कॉल का निष्पादन टल जाता है।
- फंक्शन पॉइंटर: फंक्शन की ओर इशारा करने वाले पॉइंटर द्वारा आवश्यकता पड़ने पर संगत फंक्शन कॉल किया जा सकता है, जिससे लेज़ी इवैल्यूएशन प्राप्त होता है।
void delayedCalculation() {
std::cout << "延迟计算" << std::endl;
}
void (*funcPtr)() = &delayedCalculation;
(*funcPtr)();
- अल्सकर्मी मूल्यांकन: अल्सकर्मी मूल्यांकन लेज़ी इवैल्यूएशन की एक प्रतिमान (paradigm) है, जो एक्सप्रेशन के मूल्यांकन को तब तक टालती है जब तक वह वास्तव में आवश्यक न हो।
- जेनरेटर: जेनरेटर सीक्वेंस को लेज़ी ढंग से उत्पन्न करने की तकनीक है, जो सीक्वेंस के एलिमेंट्स को आवश्यकतानुसार उत्पन्न करने देती है, न कि सभी एलिमेंट्स एक ही बार में।
std::vector<int> generateSequence(int n) {
std::vector<int> result;
for (int i = 0; i < n; ++i) {
result.push_back(i);
}
return result;
}
इनके अतिरिक्त और क्या-क्या कार्यान्वयन हो सकते हैं? मेरे साथ चर्चा के लिए आपका स्वागत है।
संबंधित विषय¶
- C++ डिफ़ॉल्ट कंस्ट्रक्टर से बचना | C++那些事
- C++ क्लास इनिशियलाइज़र लिस्ट इडियम | C++那些事
- C++ में फ़ंक्शन टेम्पलेट की जगह क्लास टेम्पलेट | C++那些事
- C++ copy-and-swap इडियम | C++那些事
- C++ डिपेंडेंसी इंजेक्शन | C++那些事
- C++ enum class स्ट्रॉन्ग टाइप्ड एनम | C++那些事
- C++ Header-Only तथा कार्यान्वयन का पृथक्करण | C++那些事
- C++ लुकअप टेबल इडियम | C++那些事
- C++ मेंबर पॉइंटर तथा टाइप जानकारी | C++那些事
- C++ Mixin इडियम | C++那些事