रे

रेंज में Ruby

1 अभ्यास

रेंज के बारे में

रेंज दो वैल्यू के बीच के अंतराल को दर्शाती है। रेंज को सबसे अधिक Integer और String टाइप के साथ इस्तेमाल किया जाता है। इनका इस्तेमाल कई कामों के लिए होता है, जैसे झटपट कोई कलेक्शन बनाना, स्ट्रिंग को काटना, यह जाँचना कि कोई वैल्यू रेंज में है या नहीं, और इटरेशन। ये रेंज ऑपरेटर .. या ... से बनाई जाती हैं। .. में अंतिम वैल्यू शामिल होती है, ... में नहीं।

1..5  # => 1..5
1...5 # => 1...5

(1..5).to_a # => [1, 2, 3, 4, 5]
(1...5).to_a # => [1, 2, 3, 4]

दो रेंज ऑपरेटर रखने की वजह यह है कि आप ऐसी रेंज बना सकें जिनमें अंतिम वैल्यू शामिल हो या न हो। यह तब काम आता है, जब आप शून्य से शुरू होने वाले इंडेक्स के साथ काम कर रहे हों।

रेंज को Range इनिशियलाइज़र की मदद से भी बनाया जा सकता है।

Range.new(1, 5) # A range containing 1, 2, 3, 4, 5
Note

Ruby में .. या ... रेंज ऑपरेटर से रेंज बनाते समय अगर आप उस रेंज पर कोई मेथड कॉल करना चाहते हैं, तो रेंज को गोल ब्रैकेट में लपेटना ज़रूरी है। ऐसा इसलिए होता है, क्योंकि ऐसा न करने पर वह मेथड रेंज ऑपरेटर के दूसरे आर्गुमेंट पर कॉल हो जाता है।

(1..5).sum # => 15
1..5.sum # => Error: undefined method `sum' for 5:Integer (NoMethodError)

सबस्ट्रिंग निकालना

किसी स्ट्रिंग को काटकर उसका एक हिस्सा निकालने के लिए आप रेंज ऑपरेटर का इस्तेमाल कर सकते हैं। इसके लिए आप सबस्ट्रिंग के शुरू और अंत वाले इंडेक्स से एक रेंज बनाते हैं।

"Hello World"[0..4] # => "Hello"
"Hello World"[6..10] # => "World"

स्ट्रिंग के अंत से सबस्ट्रिंग निकालने के लिए आप ऋणात्मक इंडेक्स का भी इस्तेमाल कर सकते हैं।

"Hello World"[-5..-1] # => "World"
"Hello World"[6..-4] # => "Wo"

रेंज के मेथड

रेंज के साथ काम करने के लिए उनमें कई मेथड मौजूद हैं। जैसे, इन मेथड की मदद से आप रेंज की सारी वैल्यू का जोड़ निकाल सकते हैं, या यह जाँच सकते हैं कि कोई वैल्यू रेंज में शामिल है या नहीं।

Method Description Example
sum रेंज की सारी वैल्यू का जोड़ लौटाता है (1..5).sum # => 15
size रेंज का आकार लौटाता है (1..5).size # => 5
include? अगर रेंज में दी गई वैल्यू शामिल है तो true लौटाता है, वरना false (1..5).include?(3) # => true

अनंत और बिना शुरुआत वाली रेंज

रेंज अनंत भी हो सकती है और बिना शुरुआत वाली भी। ऐसी रेंज की शुरुआत या अंत वाली वैल्यू nil होती है, लेकिन रेंज बनाते समय आप nil लिखना छोड़ सकते हैं।

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

"Hello World"[0..] # => "Hello World"
"Hello World"[4..] # => "o World"
"Hello World"[..5] # => "Hello "
Caution

अगर अनंत रेंज को किसी कलेक्शन पर इस्तेमाल नहीं किया जाता, तो सावधानी न बरतने पर यह एक अनंत क्रम बना सकती है।

स्ट्रिंग रेंज

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

"aa".."az".to_a # => ["aa", "ab", "ac", ..., "az"]

रेंज में कस्टम ऑब्जेक्ट

Advanced

Ruby आपको रेंज में कस्टम ऑब्जेक्ट इस्तेमाल करने की सुविधा देता है। इसके लिए ज़रूरी है कि वह ऑब्जेक्ट ये चीज़ें लागू करता हो:

  • Comparable मॉड्यूल शामिल करता हो
  • succ मेथड
  • <=> मेथड

ये मेथड मिलकर यह संभव बनाते हैं कि रेंज उस ऑब्जेक्ट पर इटरेशन कर सके और रेंज के ऑब्जेक्ट की तुलना कर सके।

class Foo
  include Comparable

  attr_reader :value

  def initialize(value)
    @value = value
  end

  def succ
    Foo.new(value + 1)
  end

  def <=>(other)
    value <=> other.value
  end
end

(Foo.new(1)..Foo.new(5))
# => #<Foo:0x7f3552bebe70 @value=1>, #<Foo:0x7f3552bebe50 @value=2>, #<Foo:0x7f3552bebe40 @value=3>, #<Foo:0x7f3552bebe30 @value=4>, #<Foo:0x7f3552bebe20 @value=5>
GitHub के ज़रिए संपादित करें यह लिंक नई विंडो या टैब में खुलता है।

रेंज सीखिए