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

रूबी रेंज में महारत हासिल करें: निर्माण, उपयोग और अंतर्निहित तंत्र

रूबी में रेंज क्या है और यह कैसे काम करती है?

एक रेंज एक ऑब्जेक्ट है जिसमें एक प्रारंभिक मान और एक अंतिम मान होता है, ये उन दो मानों के बीच पूरे रेंज में फैले अनुक्रम बनाने में आपकी मदद करते हैं।

आप 1 से 20 तक जा सकते हैं, या "a" से "z" तक।

इस लेख में आप खोजेंगे:

  • रूबी रेंज कैसे बनाएं
  • रूबी में step और include? मेथड्स का उपयोग कैसे करें
  • रेंज हुड के नीचे कैसे काम करती हैं

चलिए शुरू करते हैं!

रेंज को समझना

बस एक रिमाइंडर के रूप में, रूबी रेंज सिंटैक्स ऐसा दिखता है:

 (1..20) 

पैरेंथेसिस Range को परिभाषित करने के लिए आवश्यक नहीं हैं।

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

Range क्लास Enumerable शामिल करती है, इसलिए आपको रेंज को सरणी में बदले बिना सभी शक्तिशाली पुनरावृति मेथड्स मिलते हैं।

रूबी स्टेप मेथड

Range में कुछ उपयोगी मेथड्स हैं, जैसे step मेथड।

उदाहरण:

 (10..20).step(2).to_a # [10, 12, 14, 16, 18, 20] 

इस मेथड का उपयोग करके आप रेंज पर n की वृद्धि में पुनरावृति कर सकते हैं, जहां n वह तर्क है जो step को पास किया जाता है।

कैसे पता करें कि कोई नंबर रेंज के अंदर है या नहीं

अन्य Range मेथड्स जिनके बारे में पता होना चाहिए: cover? और include?।

यह सोचना गलती होगी कि वे एक ही काम करते हैं, क्योंकि वे नहीं करते।

include? मेथड वही करता है जिसकी आप उम्मीद करते हैं, रेंज के अंदर समावेश की जांच करता है। तो यह Range को Array में विस्तारित करने और जांचने के बराबर होगा कि क्या कुछ वहां है।

लेकिन cover? अलग है, यह केवल रेंज के प्रारंभिक और अंतिम मानों के खिलाफ जांच करता है (begin <= obj <= end), जो अप्रत्याशित परिणाम दे सकता है।

उदाहरण:

 ('a'..'z').include? "cc" # false
('a'..'z').cover? "cc" # true 

cover? उदाहरण इसके बराबर है:

 "a" <= "cc" && "cc" <= "z" 

यह true लौटाता है क्योंकि स्ट्रिंग्स की तुलना वर्ण दर वर्ण की जाती है। चूंकि "a" "c" से पहले आता है, इसलिए पहले "c" के बाद आने वाले वर्ण मायने नहीं रखते।

रूबी में रेंज कैसे लागू की जाती हैं

रेंज संख्याओं और अक्षरों तक सीमित नहीं हैं, आप किसी भी ऑब्जेक्ट का उपयोग कर सकते हैं जब तक वे निम्नलिखित मेथड्स को लागू करते हैं: <=> और succ।

उदाहरण के लिए, यहां एक DateTime रेंज है:

 require 'time'
t1 = DateTime.new
t2 = DateTime.new + 30
next_30_days = t1..t2
# उदाहरण उपयोग
next_30_days.select(&:friday?).map(&:day) 

तो यह कैसे काम करता है? आइए इस कार्यान्वयन पर एक नज़र डालते हैं:

 def range(a, b)
  # यदि पहला एलिमेंट दूसरे से बड़ा है
  # तो यह एक क्रमिक रेंज नहीं है
  return [] if a > b
  out = []
  # तब तक आगे बढ़ें जब तक दूसरा एलिमेंट
  # पहले के समान न हो जाए
  while a != b
    out << a
    a = a.next
  end
  # अंतिम एलिमेंट जोड़ें (समावेशी रेंज)
  # यह निहित रिटर्न के माध्यम से परिणाम भी लौटाता है
  out << a
end
p range 1, 10
p range 'a', 'z' 

मैंने आपको यह समझने में मदद करने के लिए कुछ टिप्पणियाँ जोड़ी हैं कि क्या हो रहा है।

विचार यह है कि हम पहले ऑब्जेक्ट पर next मेथड को तब तक कॉल करते रहते हैं जब तक यह दूसरे के बराबर नहीं हो जाता, धारणा यह है कि वे अंततः मिलेंगे।

कस्टम क्लास रेंज

अधिकांश समय आप संख्या और वर्ण रेंज का उपयोग करेंगे, लेकिन यह जानना अभी भी अच्छा है कि आप कस्टम क्लास में रेंज का उपयोग कैसे कर सकते हैं।

उदाहरण:

 class LetterMultiplier
  attr_reader :count
  include Comparable
  def initialize(letter, count)
    @letter = letter
    @count = count
  end
  def succ
    self.class.new(@letter, @count + 1)
  end
  def <=>(other)
    count <=> other.count
  end
end
a = LetterMultiplier.new('w', 2)
b = LetterMultiplier.new('w', 8)
# रेंज में सभी आइटम्स के साथ सरणी प्रिंट करें
p Array(a..b) 

यहां कुंजी यह सुनिश्चित करना है कि आप <=> और succ मेथड्स को सही ढंग से लागू करते हैं।

यदि आप include? मेथड का उपयोग करना चाहते हैं तो आपको Comparable मॉड्यूल को शामिल करने की आवश्यकता है, जो ==, <, और > जैसे मेथड्स जोड़ता है (सभी <=> मेथड के परिणामों पर आधारित)।

निष्कर्ष

इस लेख में आपने सीखा कि रूबी में रेंज कैसे काम करती हैं ताकि आप उन्हें बेहतर ढंग से समझ सकें और अपने खुद के ऑब्जेक्ट्स को लागू कर सकें जो रेंज ऑपरेशन्स का समर्थन करते हैं।

नीचे दिए गए फॉर्म में न्यूज़लेटर की सदस्यता लेना न भूलें ताकि आप अगली पोस्ट से न चूकें 🙂


  1. रूबी 2.6 में MJIT को समझना: जस्ट-इन-टाइम कंपाइलर प्रदर्शन को कैसे बढ़ाता है रूबी 2.6 में MJIT को समझना: जस्ट-इन-टाइम कंपाइलर प्रदर्शन को कैसे बढ़ाता है

    रूबी का प्रदर्शन संस्करण दर संस्करण बहुत सुधर रहा है… और रूबी विकास टीम रूबी को और भी तेज़ बनाने के लिए हर संभव प्रयास कर रही है! इन प्रयासों में से एक 3×3 प्रोजेक्ट है। लक्ष्य? रूबी 3.0, रूबी 2.0 से 3 गुना तेज़ होगा। इस प्रोजेक्ट का हिस्सा नया MJIT कंपाइलर है, जो इस लेख का विषय है। MJIT समझाया गया

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

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

  1. अपने स्पॉटिफाई प्लेलिस्ट को सहयोगी हब में बदलें - चरण-दर-चरण गाइड अपने स्पॉटिफाई प्लेलिस्ट को सहयोगी हब में बदलें - चरण-दर-चरण गाइड

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