ब्लॉक रूबी का इतना महत्वपूर्ण हिस्सा हैं, उनके बिना भाषा की कल्पना करना मुश्किल है। लेकिन लैम्ब्डा? लैम्ब्डा को कौन प्यार करता है? आप एक का उपयोग किए बिना वर्षों तक जा सकते हैं। वे लगभग पुराने जमाने के अवशेष की तरह लगते हैं।
...लेकिन यह बिल्कुल सच नहीं है। एक बार जब आप उनकी थोड़ी जांच कर लेते हैं तो लैम्बडास के पास उनकी आस्तीन में कुछ दिलचस्प तरकीबें होती हैं।
इस लेख में हम लैम्ब्डा उपयोग की मूल बातें शुरू करेंगे, और फिर कुछ और दिलचस्प उन्नत उपयोगों पर आगे बढ़ेंगे। इसलिए यदि आप प्रतिदिन लैम्ब्डा का उपयोग करते हैं और उनके बारे में सब कुछ जानते हैं, तो बस नीचे स्क्रॉल करें।
लैम्ब्डा के बारे में याद रखने वाली मुख्य बात यह है कि वे कार्यों की तरह कार्य करते हैं। ब्लॉक और प्रोसेस के अपने उपयोग हैं। लेकिन उनमें से कोई भी वास्तविक जीवन समारोह की तरह 100% व्यवहार नहीं करता है। लैम्ब्डा करते हैं। आइए सूची में नीचे जाएं।
लैम्बडास तर्कों की सही संख्या को लागू करता है
Procs के विपरीत, लैम्ब्डा तर्कों की सही संख्या को लागू करता है
लैम्बडास डिफ़ॉल्ट तर्कों का समर्थन करता है
नीचे दिए गए उदाहरण में, हम "हैलो वर्ल्ड" के डिफ़ॉल्ट तर्क मान के साथ लैम्ब्डा फ़ंक्शन बनाते हैं
लैम्ब्डा डिफ़ॉल्ट तर्कों का समर्थन करता है
return
कीवर्ड ठीक उसी तरह काम करता है जैसा आप उम्मीद करते हैं।
शायद यह एक छोटी सी बात की तरह लगता है, लेकिन अगर आपने कभी किसी खरीद के अंदर वापसी का उपयोग करने की कोशिश की है तो आप जानते हैं कि यह नहीं है।
नीचे दिया गया उदाहरण आपको दिखाएगा कि मेरा क्या मतलब है। मैंने something
. नामक एक विधि परिभाषित की है जो एक Proc
. कहता है . Proc
एक वापसी बयान है। लेकिन वह रिटर्न स्टेटमेंट मुश्किल है। केवल खरीद से लौटने के बजाय, यह कुछ विधि से लौटता है।
लेकिन जब मैं lambda
. के साथ कुछ ऐसा ही करता हूं , return
स्टेटमेंट सिर्फ लैम्ब्डा से लौटाता है। यह किसी भी अन्य फ़ंक्शन की तरह ही है।
जब आप लैम्ब्डा के अंदर रिटर्न कीवर्ड का उपयोग करते हैं, तो यह लैम्ब्डा से वापस आ जाता है
लैम्बडास बंद हैं
एक महान स्टैक ओवरफ्लो पोस्ट को उद्धृत करने के लिए:
एक क्लोजर के बारे में सोचने का सबसे आसान तरीका एक **फंक्शन है जिसे एक वेरिएबल के रूप में स्टोर किया जा सकता है** (जिसे "फर्स्ट-क्लास फंक्शन" कहा जाता है), जिसमें अन्य वेरिएबल्स को स्थानीय रूप से एक्सेस करने की विशेष क्षमता होती है। जिस दायरे में इसे बनाया गया था।
लैम्ब्डा में बनाए गए दायरे में स्थानीय अन्य चरों तक पहुंचने में सक्षम होने का क्या अर्थ है? चलो एक नज़र डालते हैं। नीचे दिए गए उदाहरण में मैंने marco
. नामक एक स्थानीय चर बनाया है . मैं उस चर का उपयोग अपने लैम्ब्डा के अंदर कर सकता हूं। और अगर मैं उस वेरिएबल में मान बदलता हूं, तो लैम्ब्डा नया मान देखता है।
रूबी लैम्ब्डा बंद हैं
लैम्बडा गिरगिट होते हैं
लैम्ब्डा के बारे में वास्तव में अजीब चीजों में से एक यह है कि हम उन्हें विभिन्न तरीकों से बुला सकते हैं। नीचे दिया गया नमूना लैम्ब्डा को आमंत्रित करने के तीन तरीके दिखाता है। वे सभी बराबर हैं।
रूबी में लैम्ब्डा को इनवाइट करने के कम से कम तीन तरीके हैं
शायद यह आपको थोड़ा अजीब लगे। यह मेरे साथ सबसे पहले किया। और ईमानदार होने के लिए l.(arg)
वाक्यविन्यास अभी भी मुझे परेशान करता है। लेकिन l[arg]
वाक्य रचना काफी दिलचस्प है। इसका मतलब है कि एक सीमित सीमा तक आप उन जगहों पर लैम्ब्डा का उपयोग कर सकते हैं जहाँ आप सामान्य रूप से एक सरणी या हैश का उपयोग करते हैं।
लैम्बडास को कंप्यूटेड हैश और सरणियों के रूप में उपयोग करना
कल्पना कीजिए कि आपके पास एक परीक्षण सूट है। आरंभीकरण के भाग के रूप में, आपको नकली व्यक्ति रिकॉर्ड बनाने की आवश्यकता है। यह आसान है। आप बस एक नया FakePerson रिकॉर्ड बनाएं और पहले नाम और अंतिम नाम में पास करें।
लेकिन क्या होगा यदि आप हर बार परीक्षण चलाने पर अलग-अलग प्रथम और अंतिम नामों का उपयोग करके सिस्टम को "फ़ज़ टेस्ट" करना चाहते हैं?
ऐसा करने का एक तरीका यह हो सकता है कि हैश के बजाय lamb लैम्ब्डा फ़ंक्शन में पास किया जाए . इस उदाहरण में, मैं उत्कृष्ट फ़ेकर रत्न के माध्यम से नकली नाम उत्पन्न करने के लिए लैम्ब्डा फ़ंक्शन का उपयोग करता हूं।
यहां, लैम्ब्डा हैश होने का दिखावा करता है।
लैम्बडास में बिल्ट-इन करी होती है
करींग एक अच्छी तकनीक है जिसका उपयोग कार्यात्मक प्रोग्रामिंग में बहुत अधिक किया जाता है। यह आपको मौजूदा फ़ंक्शन से नए फ़ंक्शन बनाने देने का एक तरीका है। जब आप इसे व्यवहार में देखते हैं तो इसे समझना आसान हो जाता है।
नीचे दिए गए कोड में मेरे पास एक लैम्ब्डा फ़ंक्शन है जो दो नंबर जोड़ता है। आसानी से, इसे ऐड कहा जाता है। फिर मैं वेतन वृद्धि नामक एक और विशिष्ट कार्य बनाने के लिए करी का उपयोग करता हूं। यह किसी दिए गए नंबर में बस एक जोड़ देता है।
आप रूबी में कोई भी खरीद कर सकते हैं
लैम्बडा एक विशेष प्रकार की प्रक्रिया है
आपने देखा होगा कि सभी कोड नमूनों में, जब भी मैंने लैम्ब्डा फ़ंक्शन को परिभाषित किया है, तो मुझे बदले में एक प्रोक मिलता है। ऐसा इसलिए है क्योंकि रूबी लैम्ब्डा को एक तरह की प्रो के रूप में लागू करती है। इसलिए इस लेख में मैंने आपको बहुत सी चीजें दिखाई हैं जो प्रोक्स के साथ-साथ लैम्ब्डा के साथ भी की जा सकती हैं।
स्टैबी लैंबडास
इस लेख में मैंने स्पष्टता के लिए लैम्ब्डा कीवर्ड का उपयोग किया है। लेकिन रूबी 1.9 में पेश किए गए लैम्ब्डा को परिभाषित करने के लिए एक अधिक संक्षिप्त सिंटैक्स है और इसे "स्टैबी लैम्ब्डा" के रूप में जाना जाता है। यहां बताया गया है कि यह कैसे काम करता है:
रूबी का छुरा लैम्ब्डा सिंटैक्स संस्करण 1.9 में पेश किया गया था