लैम्ब्डा फ़ंक्शन - लैम्ब्डा फंक्शन एक इनलाइन फंक्शन है जिसे मुख्य कार्यक्रम के दायरे से बाहर किसी भी कार्यान्वयन की आवश्यकता नहीं होती है।
लैम्ब्डा फंक्शन्स को वेरिएबल द्वारा स्टोर करने के लिए वैल्यू के रूप में भी इस्तेमाल किया जा सकता है। लैम्ब्डा को एक वस्तु के रूप में संदर्भित किया जा सकता है जिसे फ़ंक्शन द्वारा बुलाया जा सकता है (जिसे फ़ंक्टर्स कहा जाता है) )।
जब भी कंपाइलर लैम्ब्डा फ़ंक्शन की परिभाषा का सामना करता है, तो यह आम तौर पर लैम्ब्डा के लिए एक कस्टम ऑब्जेक्ट बनाता है।
लैम्ब्डा फ़ंक्शन में सामान्य फ़ंक्शन की तुलना में अधिक कार्यक्षमता होती है, उदाहरण के लिए, इसमें उपयोग किए गए चर को कैप्चर करने के लिए एक कैप्चरिंग विधि होती है। हालांकि, कैप्चर किए गए वेरिएबल को ऑब्जेक्ट के सदस्य के रूप में माना जाता है।
कभी-कभी लैम्ब्डा फ़ंक्शन को "फ़ंक्शन ऑब्जेक्ट" के रूप में भी जाना जाता है, जिसका अपना दायरा होता है और इसे सामान्य फ़ंक्शन के अंदर पैरामीटर के रूप में पारित किया जा सकता है। लैम्ब्डा फ़ंक्शन का अपना जीवनकाल होता है।
[ ] - कैप्चर करें
( ) - पैरामीटर्स (वैकल्पिक)
→ - वापसी मूल्य (वैकल्पिक)
{...} - फंक्शन बॉडी।
लैम्ब्डा का सिंटैक्स
[ ]( int a) -> int { return a-1 ;};
कैप्चर करें - एक कैप्चर एक क्लॉज है जिसके माध्यम से लैम्ब्डा फ़ंक्शन ने उस विशेष स्कोप या नेस्टेड ब्लॉक में उपलब्ध वेरिएबल्स तक पहुंच प्रदान की है।
हम दो विधियों का उपयोग करके उपलब्ध चर के मूल्य को प्राप्त कर सकते हैं,
-
ऑब्जेक्ट को नाम से कैप्चर करना - ऑब्जेक्ट को नाम से कैप्चर करने से लैम्ब्डा फंक्शन की स्थानीय कॉपी बन जाती है।
हम इस अवधारणा को निम्नलिखित उदाहरण से समझ सकते हैं -
int main(){ set s; //Adding the elements to set int i=20; for_each(s.begin(),s.end(), [i](T& elem){ cout<<elem.getVal()*i<<endl; } }
उपरोक्त उदाहरण में, लैम्ब्डा फ़ंक्शन की स्थानीय प्रतिलिपि बनाकर मान को कैप्चर किया जाता है।
-
संदर्भ द्वारा ऑब्जेक्ट कैप्चर करना - किसी ऑब्जेक्ट को संदर्भ द्वारा कैप्चर करना लैम्ब्डा फ़ंक्शन के संदर्भ में हेरफेर करता है। इस प्रकार फ़ंक्शन ऑब्जेक्ट या लैम्ब्डा फ़ंक्शन द्वारा कैप्चर किए गए मान को बदला जा सकता है।
इसे हम निम्न उदाहरण से समझ सकते हैं -
int main(){ sets; //Adding elements to the set int result=0; for_each(s.begin(),s.end(), [&result](&T elem){ result+= elem.getVal();}); cout<<result<<endl; }
लैम्ब्डा इनसाइड मेंबर फंक्शन
हम जानते हैं कि लैम्ब्डा फ़ंक्शन को किसी भी सामान्य फ़ंक्शन के अंदर एक पैरामीटर के रूप में उपयोग किया जा सकता है। उदाहरण के लिए,
class func{ public: func(set<T>s): s1(s){} void func(){ remove_if(s1.begin(),s1.end(), [this](int i) ->bool {return (i<level);}); } private: set<T>s1; int result; };