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

रूबी मेथड आर्ग्युमेंट्स में महारत: कीवर्ड, वैकल्पिक, और आवश्यक पैरामीटर्स के लिए एक व्यावहारिक गाइड

मुझे एक ईमेल मिला जिसमें कीवर्ड आर्ग्युमेंट्स का उपयोग कब करना है, इस पर मेरी राय पूछी गई थी।

मैंने सोचा कि मैं अपने उत्तर को रूबी मेथड आर्ग्युमेंट्स के बारे में एक पूर्ण लेख में विस्तारित करूं ताकि हर कोई लाभ उठा सके!

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

हमारे पास सब कुछ है:

मानक आवश्यक आर्ग्युमेंट्स से लेकर वैकल्पिक आर्ग्युमेंट्स और यहां तक कि कीवर्ड (नामित) आर्ग्युमेंट्स तक।

इस लेख में, आप इन सभी आर्ग्युमेंट प्रकारों के बीच अंतर के बारे में जानने जा रहे हैं, और अपनी स्थिति के आधार पर किनका उपयोग करना है।

सही प्रकार के आर्ग्युमेंट्स का उपयोग करने से आपका कोड पढ़ने और काम करने में आसान हो जाएगा।

संदेह होने पर मानक आर्ग्युमेंट्स का उपयोग करें

आवश्यक आर्ग्युमेंट्स वही हैं जो आपको डिफ़ॉल्ट रूप से मिलते हैं।

यहां एक उदाहरण है:

 def write(file, data, mode) end write("cats.txt", "cats are cool!", "w") 

यदि आप आवश्यक आर्ग्युमेंट्स की सटीक संख्या पास नहीं करते हैं तो आपको यह परिचित त्रुटि संदेश मिलेगा:

 write("shopping_list.txt", "bacon") ArgumentError: wrong number of arguments (2 for 3) 

इसका मतलब है कि आपने मेथड को 2 आर्ग्युमेंट्स दिए, लेकिन इसे 3 की आवश्यकता है!

वैकल्पिक आर्ग्युमेंट्स के साथ लचीले मेथड्स

आप अपने कुछ आर्ग्युमेंट्स को डिफ़ॉल्ट मान प्रदान करके वैकल्पिक बनाना चाह सकते हैं।

उदाहरण के लिए:

 def write(file, data, mode = "w") end 

अब आप write को 2 आर्ग्युमेंट्स के साथ कॉल कर सकते हैं, जिस स्थिति में mode डिफ़ॉल्ट मान ("w") के बराबर होगा, या आप डिफ़ॉल्ट मान को ओवरराइड करने और अलग परिणाम प्राप्त करने के लिए 3 आर्ग्युमेंट्स पास कर सकते हैं।

यह डिफ़ॉल्ट मान इस मेथड को कॉल करते समय आपका कुछ काम बचाता है जबकि अभी भी आपको इसे बदलने का विकल्प देता है।

स्पष्टता बढ़ाने के लिए कीवर्ड आर्ग्युमेंट्स का उपयोग करें

आवश्यक और डिफ़ॉल्ट आर्ग्युमेंट्स के नुकसानों में से एक यह है कि वे ऑर्डर पर निर्भर हैं।

मतलब कि आपको आर्ग्युमेंट्स को उसी क्रम में पास करना होगा

यदि आप उन्हें गलत क्रम में पास करते हैं:

आपको अप्रत्याशित परिणाम मिलेंगे!

उदाहरण के लिए, write मेथड में, आपको पहले file, फिर data और अंत में mode के साथ कॉल करना होगा।

 def write(file, data, mode) end 

कीवर्ड आर्ग्युमेंट्स आपको आर्ग्युमेंट्स के क्रम को बदलने की अनुमति देते हैं।

यहां एक उदाहरण है:

 def write(file:, data:, mode: "ascii") end 

यह आपको मेथड को अलग क्रम में कॉल करने की अनुमति देता है:

 write(data: 123, file: "test.txt") 

लेकिन अधिक महत्वपूर्ण बात, जब आप मेथड को कॉल करते हैं तो आप आर्ग्युमेंट्स का अर्थ स्पष्ट रूप से देख सकते हैं।

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

मान लीजिए हमारे पास एक Point क्लास है।

आप इसे इस तरह लिख सकते हैं:

 class Point def initialize(x: , y:) @x, @y = x, y end end point = Point.new(x: 10, y: 20) 

इस तरह दो संख्याओं (10 और 20) में से कौन सी x मान से मेल खाती है या y मान से, इस बारे में कोई संभावित भ्रम नहीं है।

यह आपके मुख्य लक्ष्यों में से एक है जब आप कोड लिखते हैं, भ्रम और गलतफहमी से जितना संभव हो उतना बचें।

यदि कीवर्ड आर्ग्युमेंट्स का उपयोग करने से आपको ऐसा करने में मदद मिलती है तो उनका उपयोग करें।

इसके बारे में सोचें:

"क्या कीवर्ड आर्ग्युमेंट्स जोड़ने से इसे समझना आसान हो जाएगा या यह मेरे कोड में अतिरिक्त काम और अव्यवस्था जोड़ देगा?"

कीवर्ड आर्ग्युमेंट्स के बारे में एक और बात यह है कि वे उन आर्ग्युमेंट्स के बारे में बहुत स्पष्ट हैं जो आप गायब कर रहे हैं।

उदाहरण:

 point = Point.new # missing keywords: x, y 

आप कीवर्ड आर्ग्युमेंट्स को नियमित आर्ग्युमेंट्स के साथ भी जोड़ सकते हैं।

एक रणनीति जिसे मैं रूबी बिल्ट-इन मेथड्स पर देख रहा हूं वह यह है कि नए संस्करण नए, वैकल्पिक आर्ग्युमेंट्स को कीवर्ड आर्ग्युमेंट्स के रूप में जोड़ते हैं।

इसके उदाहरण रूबी 2.4 में पेश किए गए Float#round, Kernel#clone और String#lines के लिए कीवर्ड आर्ग्युमेंट्स हैं।

आवश्यकतानुसार कई मानों को कैप्चर करने के लिए वेरिएबल आर्ग्युमेंट्स का उपयोग करें

क्या होगा यदि आप असीमित मात्रा में मान लेना चाहते हैं?

तब आप वेरिएबल आर्ग्युमेंट्स का उपयोग कर सकते हैं:

 def print_all(*args) end print_all(1, 2, 3, 4, 5) 

यह आपको मेथड को किसी भी संख्या में आर्ग्युमेंट्स के साथ कॉल करने की अनुमति देता है, जिसमें कोई भी नहीं। एक वेरिएबल आर्ग्युमेंट इससे पास किए गए सभी मानों की एक सरणी है।

आप इसे अन्य प्रकार के आर्ग्युमेंट्स के साथ जोड़ सकते हैं।

उदाहरण:

 def print_all(title, *chapters) end 

यह पहले आर्ग्युमेंट को title के रूप में लेगा, और बाकी को chapters सरणी के रूप में। ध्यान दें कि एक वेरिएबल आर्ग्युमेंट आपके सभी आवश्यक और वैकल्पिक आर्ग्युमेंट्स के बाद होना चाहिए, और किसी भी कीवर्ड आर्ग्युमेंट्स से पहले।

सही क्रम का उपयोग करें

यदि आप उन्हें जोड़ना चाहते हैं और सिंटैक्स त्रुटि से बचना चाहते हैं तो आर्ग्युमेंट्स का वैध क्रम यहां दिया गया है:

 required -> optional -> variable -> keyword 

यहां एक मेथड है जो हर संभव आर्ग्युमेंट प्रकार दिखाता है:

 def testing(a, b = 1, *c, d: 1, **x) p a,b,c,d,x end testing('a', 'b', 'c', 'd', 'e', d: 2, x: 1) 

**x वेरिएबल आर्ग्युमेंट्स के समान है, लेकिन कीवर्ड आर्ग्युमेंट्स के लिए। यह एक सरणी के बजाय एक हैश होगा।

कैच-ऑल आर्ग्युमेंट

कुछ दुर्लभ अवसरों पर आप इसे देख सकते हैं:

 def print_all(*) end 

इसका मतलब है कि मेथड किसी भी आर्ग्युमेंट को स्वीकार कर रहा है, लेकिन उनके साथ कुछ नहीं कर रहा है। यह एक ब्लॉक के अंदर अंडरस्कोर वर्ण (_) का उपयोग करने के समान है ताकि यह दिखाया जा सके कि आप किन आर्ग्युमेंट्स का उपयोग नहीं कर रहे हैं।

इसके लिए एक व्यावहारिक उपयोग super कीवर्ड के संयोजन में हो सकता है:

 class Food def nutrition(vitamins, minerals) puts vitamins puts minerals end end class Bacon < Food def nutrition(*) super end end bacon = Bacon.new bacon.nutrition("B6", "Iron") 

अब जब Food का nutrition अपने आर्ग्युमेंट लिस्ट को बदलता है, तो आपको Bacon में आर्ग्युमेंट्स बदलने की आवश्यकता नहीं है।

सारांश

आपने रूबी के शक्तिशाली मेथड आर्ग्युमेंट्स और उनका उपयोग कैसे करें के बारे में सीखा! आवश्यक आर्ग्युमेंट्स एक अच्छी शुरुआत हैं, फिर आप वैकल्पिक आर्ग्युमेंट्स के साथ लचीलापन जोड़ सकते हैं और कीवर्ड आर्ग्युमेंट्स के साथ स्पष्टता जोड़ सकते हैं।

आशा है कि आपने इसे उपयोगी और दिलचस्प पाया!

इस पोस्ट को ट्विटर पर शेयर करें ताकि अधिक लोग इसे देख सकें 🙂

  1. Ruby के grep मेथड में महारत: कोड उदाहरणों के साथ एक व्यावहारिक गाइड Ruby के grep मेथड में महारत: कोड उदाहरणों के साथ एक व्यावहारिक गाइड

    आइए grep मेथड के बारे में बात करते हैं। यह मेथड आपके लिए क्या कर सकता है? आप enumerable ऑब्जेक्ट्स को फ़िल्टर करने के लिए Grep का उपयोग कर सकते हैं, जैसे Arrays और Ranges। "लेकिन select पहले से ही ऐसा करता है!" हाँ, लेकिन grep अलग तरीके से काम करता है और अलग परिणाम उत्पन्न करता है। आइए कुछ

  1. Ruby के Map मेथड में महारत: उदाहरणों के साथ एक व्यावहारिक गाइड Ruby के Map मेथड में महारत: उदाहरणों के साथ एक व्यावहारिक गाइड

    Map एक Ruby मेथड है जिसका उपयोग आप Arrays, Hashes और Ranges के साथ कर सकते हैं। map का मुख्य उपयोग डेटा को ट्रांसफॉर्म करना है। उदाहरण के लिए: स्ट्रिंग्स की एक सरणी दिए जाने पर, आप हर स्ट्रिंग पर जा सकते हैं और हर कैरेक्टर को UPPERCASE बना सकते हैं। या यदि आपके पास User ऑब्जेक्ट्स की एक सूची है... आ

  1. रूबी स्ट्रक्ट्स और OpenStruct में महारत: कुशल वैल्यू ऑब्जेक्ट्स रूबी स्ट्रक्ट्स और OpenStruct में महारत: कुशल वैल्यू ऑब्जेक्ट्स

    रूबी में स्ट्रक्ट क्या है? एक स्ट्रक्ट एक बिल्ट-इन रूबी क्लास है, इसका उपयोग वैल्यू ऑब्जेक्ट्स उत्पन्न करने वाली नई क्लासेस बनाने के लिए किया जाता है। एक वैल्यू ऑब्जेक्ट संबंधित विशेषताओं को एक साथ संग्रहीत करने के लिए उपयोग किया जाता है। यहां एक उदाहरण है: दो निर्देशांकों (x और y) के साथ एक Point।