lambdas c with examples
सरल शब्दों में C ++ में लैम्ब्डा एक्सप्रेशन के बारे में जानें।
लैम्ब्डा अभिव्यक्ति C ++ की सबसे नई अवधारणा है जिसे C ++ 11 के बाद से पेश किया गया था।
इस ट्यूटोरियल में, हम C ++ में लैम्ब्डा के बारे में जानेंगे। हम यह भी चर्चा करेंगे कि कार्यक्रम में लैम्ब्डा को कैसे परिभाषित और उपयोग किया जा सकता है।
=> पूर्ण सी ++ प्रशिक्षण श्रृंखला यहां देखें।
आप क्या सीखेंगे:
लैम्ब्डा एक्सप्रेशन / कार्य
लैम्ब्डा, जैसा कि वे आमतौर पर कहा जाता है, मूल रूप से कोड के छोटे इनलाइन स्निपेट्स हैं जो कि फ़ंक्शन के अंदर उपयोग किए जा सकते हैं या यहां तक कि कॉल स्टेटमेंट भी काम कर सकते हैं। उनका नाम या पुन: उपयोग नहीं किया गया है।
हम लंबोदर को 'ऑटो' घोषित कर सकते हैं और उन्हें कार्यक्रम में कहीं भी इस्तेमाल कर सकते हैं।
c ++ स्ट्रिंग को चेंज करें
लैम्ब्डा का उपयोग कैसे करें / लिखें?
लैम्बदास को परिभाषित करने का सामान्य वाक्य विन्यास इस प्रकार है:
(Capture clause) (parameter_list) mutable exception ->return_type { Method definition; }
कब्जा बंद करो : लैम्बडा इंट्रोड्यूसर C ++ विनिर्देशन के अनुसार।
पैरामीटर सूची : इसे लंबोदर घोषणा भी कहा जाता है। वैकल्पिक है और एक विधि की पैरामीटर सूची के समान है।
परिवर्तनशील : वैकल्पिक। संशोधित किए जाने वाले मूल्य से कॉल द्वारा पकड़े गए चर को सक्षम करता है।
अपवाद : अपवाद विनिर्देश। वैकल्पिक। यह इंगित करने के लिए कि 'लैम्ब्डा एक अपवाद को नहीं फेंकता है' का उपयोग करें।
रिटर्न_टाइप : वैकल्पिक। संकलक अपने आप ही अभिव्यक्ति के रिटर्न प्रकार को घटा देता है। लेकिन चूंकि लैम्ब्डा अधिक जटिल हो जाता है, इसलिए रिटर्न प्रकार को शामिल करना बेहतर होता है क्योंकि कंपाइलर रिटर्न प्रकार को कम करने में सक्षम नहीं हो सकता है।
विधि की परिभाषा : लंबोदर शरीर।
लैम्ब्डा परिभाषा के एक कैप्चर क्लॉज का उपयोग यह निर्दिष्ट करने के लिए किया जाता है कि कौन से चर पर कब्जा कर लिया गया है और क्या वे संदर्भ या मूल्य से कैप्चर किए गए हैं।
एक खाली कैप्चर क्लोजर () इंगित करता है कि लैम्ब्डा द्वारा किसी भी चर का उपयोग नहीं किया जाता है, जिसका अर्थ है कि यह केवल उन चर का उपयोग कर सकता है जो इसके लिए स्थानीय हैं।
'कैप्चर-डिफॉल्ट' मोड इंगित करता है कि लैम्ब्डा में संदर्भित चर के बाहर कैसे कब्जा करें:
- कैप्चर क्लोजर (और) का अर्थ है कि चर संदर्भ द्वारा कैप्चर किए गए हैं।
- कैप्चर क्लोजर (=) इंगित करता है कि चर मूल्य द्वारा कैप्चर किए गए हैं।
यदि हमारे पास कैप्चर-डिफॉल्ट और कैप्चर क्लॉज है, तो हमारे पास उस विशेष कैप्चर के कैप्चर में पहचानकर्ता नहीं हो सकता है और पहचानकर्ता हो सकता है। इसी तरह, यदि कैप्चर क्लॉज में कैप्चर-डिफॉल्ट = होता है, तो कैप्चर क्लॉज में फॉर्म = पहचानकर्ता नहीं हो सकता है। इसके अलावा, एक पहचानकर्ता या ’यह 'कैप्चर क्लाज में एक से अधिक बार दिखाई नहीं दे सकता है।
यह निम्नलिखित उदाहरणों से स्पष्ट होना चाहिए।
कैसे .jar फ़ाइल को स्थापित करने के लिए
(&sum, sum_var) //OK, explicitly specified capture by value (sum_var, &sum) //ok, explicitly specified capture by reference (&, &sum_var) // error, & is the default still sum_var preceded by & (i, i) //error, i is used more than once
यहाँ, sum, sum_var और I को लैम्ब्डा में कैप्चर करने और उपयोग करने के लिए चर हैं।
नीचे दिए गए C ++ में एक लैम्ब्डा एक्सप्रेशन का एक बेसिक उदाहरण है।
#include #include using namespace std; int main() { auto sum = ()(int a, int b) { return a + b; }; cout <<'Sum of two integers:'<< sum(5, 6) << endl; return 0; }
आउटपुट:
दो पूर्णांकों का योग: 11
यहां हमारे पास दो मानों के योग की गणना करने के लिए इनलाइन लैम्ब्डा अभिव्यक्ति है। हमने पूर्णांक के रूप में मानों के प्रकार a और b को निर्दिष्ट किया है।
उपरोक्त कोड के साथ एक समस्या यह है कि यह केवल पूर्णांकों के लिए काम करता है। यदि बाद में कार्यक्रम में, हम दो डबल्स या स्ट्रिंग्स या किसी भी अन्य प्रकार को जोड़ना चाहते हैं, तो हमें उन कई लंबों को रखना होगा। यह प्रोग्रामिंग का एक कुशल तरीका नहीं है।
हम टेम्पलेट पैरामीटर का उपयोग करके इस समस्या को दूर कर सकते हैं। यह सभी डेटा प्रकारों के लिए लैम्ब्डा को सामान्यीकृत बनाता है। यह C ++ 14 के बाद से किया जाता है।
तो उपरोक्त कार्यक्रम को निम्नानुसार संशोधित किया जाएगा:
#include #include using namespace std; int main() { // generalized lambda auto sum = ()(auto a, auto b) { return a + b; }; cout <<'Sum(5,6) = '<< sum(5, 6) << endl; // sum of two integers cout <<'Sum(2.0,6.5) = '< आउटपुट:
सम (५,६) = ११
सम (2.0,6.5) = 8.5
सम (स्ट्रिंग ('सॉफ़्टवेयरटाइटिंग'), स्ट्रिंग ('हेल्प.कॉम')) = सॉफ्टवेयरटाइटलिंग.कॉम
इस प्रकार इस कार्यक्रम में, हमने एक जेनेरिक लैम्ब्डा राशि का उपयोग किया है, जिसका उपयोग किसी भी प्रकार की दो वस्तुओं का योग खोजने के लिए किया जा सकता है। ध्यान दें कि हमने ’ऑटो’ कीवर्ड का उपयोग यह इंगित करने के लिए किया है कि डेटा के आधार पर पैरामीटर का डेटा प्रकार काटा जाएगा।
इस लैम्ब्डा के उपयोग को प्रदर्शित करने के लिए, हमने इसे तीन अलग-अलग डेटा प्रकारों, इंट, फ्लोट और स्ट्रिंग के साथ उपयोग किया है। आउटपुट से, हम जानते हैं कि डेटा के प्रकार के अनुसार, राशि का संचालन किया जाता है। उदाहरण के लिए, जब हम लैम्बडा योग को स्ट्रिंग मापदंडों की आपूर्ति करते हैं, तो यह दो तारों को मिलाता है।
निष्कर्ष
हम C ++ में लैम्ब्डा एक्सप्रेशंस पर इस ट्यूटोरियल के अंत में आए हैं। यह C ++ में सबसे नया कॉन्सेप्ट है और कोड इनलाइन के एक छोटे से स्निपेट को निष्पादित करने की आवश्यकता होने पर बहुत मददगार हो सकता है। लैम्ब्डा को सभी डेटा प्रकारों के लिए सामान्य और उपयोग किया जा सकता है।
हमारे आगामी ट्यूटोरियल में, हम C ++ में कुछ अतिरिक्त विषयों जैसे समय, मानक इनपुट / आउटपुट और लॉगिंग पर चर्चा करेंगे।
=> लोकप्रिय सी ++ प्रशिक्षण श्रृंखला के माध्यम से यहां पढ़ें।
अनुशंसित पाठ
- तुलना परीक्षण क्या है (उदाहरण के साथ जानें)
- उदाहरणों के साथ अजगर डेटाइम ट्यूटोरियल
- उदाहरणों के साथ यूनिक्स में कमान काटें
- यूनिक्स कैट कमांड सिंटैक्स, उदाहरण के साथ विकल्प
- उदाहरणों के साथ MongoDB में कर्सर का उपयोग
- उदाहरणों के साथ यूनिक्स में Ls कमांड
- C ++ में दिनांक और समय कार्य उदाहरण के साथ
- MongoDB सॉर्ट () उदाहरण के साथ विधि