রে

রেঞ্জ মধ্যে Ruby

১টি অনুশীলনী

রেঞ্জ সম্পর্কে

রেঞ্জ দুটি মানের মধ্যবর্তী একটি ব্যবধান বোঝায়। রেঞ্জ সমর্থন করে এমন সবচেয়ে কমন টাইপ হলো 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-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে

রেঞ্জ শিখুন