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

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

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

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

वेरिएबल तर्कों का उपयोग जितने आवश्यक हो उतने मान कैप्चर करने के लिए करें

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

फिर आप चर तर्कों . का उपयोग कर सकते हैं :

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

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

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

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")

अब जब भोजन का nutrition इसकी तर्क सूची को बदलता है, आपको Bacon . में तर्क बदलने की आवश्यकता नहीं है भी।

सारांश

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

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

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


  1. रूबी ग्रेप विधि का उपयोग कैसे करें (उदाहरण के साथ)

    आइए बात करते हैं grep . के बारे में विधि। यह विधि आपके लिए क्या कर सकती है? आप ग्रेप का उपयोग एरेज़ और रेंज जैसी असंख्य वस्तुओं को फ़िल्टर करने के लिए कर सकते हैं। “लेकिन चुनें पहले से ही ऐसा करता है!” हां, लेकिन grep एक अलग तरीके से काम करता है और यह अलग परिणाम देता है। आइए कुछ उदाहरण देखें।

  1. रूबी मानचित्र विधि का उपयोग कैसे करें (उदाहरण के साथ)

    मैप एक रूबी विधि है जिसका उपयोग आप ऐरे, हैश और रेंज के साथ कर सकते हैं। मानचित्र का मुख्य उपयोग डेटा को ट्रांसफ़ॉर्म करना है। उदाहरण के लिए : स्ट्रिंग्स की एक सरणी को देखते हुए, आप प्रत्येक स्ट्रिंग पर जा सकते हैं और प्रत्येक वर्ण को अपरकेस बना सकते हैं। या यदि आपके पास User . की सूची है ऑब्जेक्

  1. रूबी में स्ट्रक्चर और ओपनस्ट्रक्चर का उपयोग कैसे करें?

    रूबी में स्ट्रक्चर क्या है? एक संरचना एक अंतर्निहित रूबी वर्ग है, इसका उपयोग नए वर्ग बनाने के लिए किया जाता है जो मूल्य वस्तुओं का उत्पादन करते हैं। संबंधित विशेषताओं को एक साथ संग्रहीत करने के लिए एक मूल्य वस्तु का उपयोग किया जाता है। यहां एक उदाहरण दिया गया है : एक Point दो निर्देशांकों के साथ