Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

Ruby में Lambdas में महारत हासिल करें: बुनियादी से उन्नत तकनीकें तक

ब्लॉक Ruby का इतना महत्वपूर्ण हिस्सा हैं, उनके बिना भाषा की कल्पना करना कठिन है। लेकिन लैम्ब्डा? कौन लैम्ब्डा से प्यार करता है? आप वर्षों तक बिना एक का उपयोग किए जा सकते हैं। वे लगभग एक बीते युग के अवशेष लगते हैं।

...लेकिन यह पूरी तरह सच नहीं है। लैम्ब्डा की आस्तीन में कुछ दिलचस्प तरकीबें हैं एक बार जब आप उनकी थोड़ी जांच करते हैं।

इस आर्टिकल में हम लैम्ब्डा उपयोग की मूल बातों से शुरू करेंगे, और फिर कुछ अधिक दिलचस्प उन्नत उपयोगों पर जाएंगे। इसलिए यदि आप हर दिन लैम्ब्डा का उपयोग करते हैं और उनके बारे में सब जानते हैं, तो बस नीचे स्क्रॉल करें।

लैम्ब्डा के बारे में याद रखने वाली मुख्य बात यह है कि वे फ़ंक्शन की तरह व्यवहार करते हैं। ब्लॉक्स और Procs के अपने उपयोग हैं। लेकिन उनमें से कोई भी 100% वास्तविक जीवन फ़ंक्शन की तरह व्यवहार नहीं करता। लैम्ब्डा करते हैं। आइए सूची देखें।

लैम्ब्डा सही संख्या में आर्गुमेंट लागू करते हैं

Ruby में Lambdas में महारत हासिल करें: बुनियादी से उन्नत तकनीकें तक Procs के विपरीत, लैम्ब्डा सही संख्या में आर्गुमेंट लागू करते हैं

लैम्ब्डा डिफ़ॉल्ट आर्गुमेंट का समर्थन करते हैं

नीचे दिए गए उदाहरण में, हम "hello world" के डिफ़ॉल्ट आर्गुमेंट मान के साथ एक लैम्ब्डा फ़ंक्शन बनाते हैं

Ruby में Lambdas में महारत हासिल करें: बुनियादी से उन्नत तकनीकें तक लैम्ब्डा डिफ़ॉल्ट आर्गुमेंट का समर्थन करते हैं

return कीवर्ड ठीक वैसे ही काम करता है जैसा आप उम्मीद करेंगे।

शायद यह एक छोटी बात लगती है, लेकिन अगर आपने कभी Proc के अंदर return का उपयोग करने की कोशिश की है तो आप जानते हैं कि यह नहीं है।

नीचे दिया गया उदाहरण आपको दिखाएगा कि मेरा क्या मतलब है। मैंने `something` नामक एक मेथड परिभाषित किया है जो एक `Proc` को कॉल करता है। `Proc` में एक return स्टेटमेंट है। लेकिन वह return स्टेटमेंट ट्रिकी है। केवल Proc से वापस आने के बजाय, यह something मेथड से वापस आता है।

लेकिन जब मैं `lambda` के साथ कुछ समान करता हूँ, तो `return` स्टेटमेंट केवल लैम्ब्डा से वापस आता है। यह किसी अन्य फ़ंक्शन की तरह ही है।

Ruby में Lambdas में महारत हासिल करें: बुनियादी से उन्नत तकनीकें तक जब आप लैम्ब्डा के अंदर return कीवर्ड का उपयोग करते हैं, तो यह लैम्ब्डा से वापस आता है

लैम्ब्डा क्लोजर हैं

एक महान स्टैक ओवरफ्लो पोस्ट को उद्धृत करने के लिए:

क्लोजर के बारे में सोचने का सबसे सरल तरीका एक **फ़ंक्शन है जिसे वेरिएबल के रूप में संग्रहीत किया जा सकता है** ("फर्स्ट-क्लास फ़ंक्शन" के रूप में संदर्भित), जिसमें उस स्कोप में स्थानीय अन्य वेरिएबल्स तक पहुंचने की विशेष क्षमता होती है जिसमें इसे बनाया गया था।

इसका क्या मतलब है कि उस स्कोप में स्थानीय अन्य वेरिएबल्स तक पहुंचने में सक्षम होना जिसमें लैम्ब्डा बनाया गया था? आइए देखें। नीचे दिए गए उदाहरण में मैंने `marco` नामक एक स्थानीय वेरिएबल बनाया है। मैं उस वेरिएबल को अपने लैम्ब्डा के अंदर उपयोग कर सकता हूँ। और यदि मैं उस वेरिएबल में मान बदलता हूँ, तो लैम्ब्डा नया मान देखता है।

Ruby में Lambdas में महारत हासिल करें: बुनियादी से उन्नत तकनीकें तक Ruby लैम्ब्डा क्लोजर हैं

लैम्ब्डा गिरगिट हैं

लैम्ब्डा के बारे में वास्तव में अजीब चीजों में से एक उन्हें कॉल करने के तरीकों की विविधता है। नीचे दिया गया सैंपल लैम्ब्डा को इनवोक करने के तीन तरीके दिखाता है। वे सभी समतुल्य हैं।

Ruby में Lambdas में महारत हासिल करें: बुनियादी से उन्नत तकनीकें तक Ruby में लैम्ब्डा को इनवोक करने के कम से कम तीन तरीके हैं

शायद यह आपको थोड़ा अजीब लगता है। मुझे भी पहले ऐसा लगा था। और ईमानदारी से `l.(arg)` सिंटैक्स अभी भी मुझे चकरा देता है। लेकिन `l[arg]` सिंटैक्स काफी दिलचस्प है। इसका मतलब है कि सीमित सीमा तक आप लैम्ब्डा का उपयोग उन स्थानों पर कर सकते हैं जहां आप सामान्य रूप से एक सरणी या हैश का उपयोग करेंगे।

लैम्ब्डा को कंप्यूटेड हैश और सरणियों के रूप में उपयोग करना

कल्पना करें कि आपके पास एक टेस्ट सूट है। इनिशियलाइज़ेशन के हिस्से के रूप में, आपको नकली Person रिकॉर्ड बनाने की आवश्यकता है। यह सरल है। आप बस एक नया FakePerson रिकॉर्ड बनाते हैं और एक पहला नाम और अंतिम नाम पास करते हैं।

लेकिन क्या होगा यदि आप हर बार टेस्ट चलाने पर अलग-अलग पहला और अंतिम नाम का उपयोग करके सिस्टम को "फज़ टेस्ट" करना चाहते हैं?

इसे करने का एक तरीका **हैश के बजाय एक लैम्ब्डा फ़ंक्शन पास करना** हो सकता है। इस उदाहरण में, मैं उत्कृष्ट Faker जेम के माध्यम से नकली नाम उत्पन्न करने के लिए एक लैम्ब्डा फ़ंक्शन का उपयोग करता हूँ।

Ruby में Lambdas में महारत हासिल करें: बुनियादी से उन्नत तकनीकें तक यहाँ, लैम्ब्डा एक होने का दिखावा करता है।

लैम्ब्डा में बिल्ट-इन करीइंग है

करीइंग फंक्शनल प्रोग्रामिंग में बहुत उपयोग की जाने वाली एक कूल तकनीक है। यह मौजूदा फ़ंक्शन से नए फ़ंक्शन बनाने का एक तरीका है। जब आप इसे अभ्यास में देखते हैं तो यह समझना आसान होता है।

नीचे दिए गए कोड में मेरे पास एक लैम्ब्डा फ़ंक्शन है जो दो संख्याओं को जोड़ता है। सुविधाजनक रूप से, इसे add कहा जाता है। फिर मैं एक अधिक विशिष्ट फ़ंक्शन increment बनाने के लिए करीइंग का उपयोग करता हूँ। यह केवल किसी भी दी गई संख्या में एक जोड़ता है।

Ruby में Lambdas में महारत हासिल करें: बुनियादी से उन्नत तकनीकें तक आप Ruby में किसी भी Proc को करी कर सकते हैं

लैम्ब्डा Proc का एक विशेष प्रकार हैं

आपने देखा होगा कि सभी कोड सैंपल में, जब भी मैंने एक लैम्ब्डा फ़ंक्शन परिभाषित किया है, मुझे बदले में एक Proc मिलता है। ऐसा इसलिए है क्योंकि Ruby लैम्ब्डा को Proc के एक प्रकार के रूप में लागू करता है। इसलिए इस आर्टिकल में मैंने आपको जो बहुत सी चीजें दिखाई हैं, उन्हें Procs के साथ-साथ लैम्ब्डा के साथ भी किया जा सकता है।

स्टैबी लैम्ब्डा

इस आर्टिकल में मैंने स्पष्टता के लिए लैम्ब्डा कीवर्ड का उपयोग किया है। लेकिन Ruby 1.9 में पेश किए गए लैम्ब्डा को परिभाषित करने के लिए एक अधिक संक्षिप्त सिंटैक्स है जिसे "स्टैबी लैम्ब्डा" के रूप में जाना जाता है। यहाँ बताया गया है कि यह कैसे काम करता है:

Ruby में Lambdas में महारत हासिल करें: बुनियादी से उन्नत तकनीकें तक Ruby का स्टैबी लैम्ब्डा सिंटैक्स संस्करण 1.9 में पेश किया गया था


  1. रूबी एक्सेप्शन में TracePoint के साथ महारत हासिल करें: जटिल एरर परिदृश्यों का निदान करें रूबी एक्सेप्शन में TracePoint के साथ महारत हासिल करें: जटिल एरर परिदृश्यों का निदान करें

    कभी-कभी यह समझना वास्तव में मुश्किल हो सकता है कि एक्सेप्शन के साथ क्या हो रहा है - विशेष रूप से बड़े ऐप्स में। कल्पना करें कि आप किसी मौजूदा प्रोजेक्ट के अंदर कुछ कोड पर काम कर रहे हैं। आप एक एक्सेप्शन उठाते हैं, फिर कुछ अजीब होता है। शायद एक्सेप्शन निगल लिया जाता है। शायद एक एनवायरनमेंट वेरिएबल बद

  1. रूबी में AWS Lambda: एंड-टू-एंड बिल्ड, टेस्ट और डिप्लॉय गाइड रूबी में AWS Lambda: एंड-टू-एंड बिल्ड, टेस्ट और डिप्लॉय गाइड

    सॉफ्टवेयर विकसित करना चुनौतीपूर्ण हो सकता है, लेकिन इसे बनाए रखना कहीं अधिक चुनौतीपूर्ण है। रखरखाव में सॉफ्टवेयर पैच और सर्वर रखरखाव शामिल हैं। इस पोस्ट में, हम सर्वर प्रबंधन और रखरखाव पर ध्यान केंद्रित करेंगे। पारंपरिक रूप से, सर्वर ऑन-प्रिमाइसेस थे, जिसका अर्थ है भौतिक हार्डवेयर खरीदना और बनाए रखन

  1. Ruby 2.6 में 9 प्रमुख संवर्द्धन का अन्वेषण Ruby 2.6 में 9 प्रमुख संवर्द्धन का अन्वेषण

    Ruby का एक नया संस्करण नई सुविधाओं और प्रदर्शन सुधारों के साथ आ रहा है। क्या आप परिवर्तनों के साथ बने रहना चाहेंगे? आइए एक नज़र डालते हैं! अंतहीन रेंज (Endless Ranges) Ruby 2.5 और पुराने संस्करण पहले से ही अंतहीन रेंज का एक रूप (Float::INFINITY के साथ) का समर्थन करते हैं, लेकिन Ruby 2.6 इसे अगले स्त