অবজেক্টগুলো ইনস্ট্যান্স ভ্যারিয়েবল সেট করে নিজেদের স্টেট ধরে রাখতে পারে। এই ভ্যারিয়েবলগুলো একটি অবজেক্টের ভেতরে থাকে এবং সাধারণত কিছু অভ্যন্তরীণ স্টেট সংরক্ষণ করতে ব্যবহৃত হয়।
ইনস্ট্যান্স ভ্যারিয়েবল সবসময় একটি @ দিয়ে শুরু হয়।
আপনি একটি @ দিয়ে শুরু হওয়া ভ্যারিয়েবল সেট করে নতুন ইনস্ট্যান্স ভ্যারিয়েবল তৈরি করতে পারেন।
যেমন:
class Repeater
def hear(something)
# Save what's been heard into a new instance variable called @heard
@heard = something
end
def repeat
# Return the value of the instance variable
@heard
end
end
repeater = Repeater.new
repeater.hear("Hello, friend!")
print repeater.repeat # Prints "Hello, friend!"
অবজেক্টগুলো সাধারণত তাদের প্রাথমিক স্টেট একটি initialize মেথডে সেট করে, যা একটি ক্লাসে new কল করলে স্বয়ংক্রিয়ভাবে কল হয়।
class Airplane
def initialize
@wings = 2
end
def wings
@wings
end
end
plane = Airplane.new
plane.wings # returns 2
initialize মেথড আর্গুমেন্টও নিতে পারে, যাতে প্রতিটি ইনস্ট্যান্স একটি কাস্টম স্টেট নিয়ে শুরু করতে পারে:
class Suitcase
def initialize(locked)
@locked = locked
end
end
ইনস্ট্যান্স ভ্যারিয়েবলগুলোকে বাইরের পড়া ও লেখা থেকে প্রাইভেট ধরে নেওয়া ভালো অভ্যাস। তার বদলে আমরা তাদের মান পড়া ও সেট করার জন্য মেথড ডিফাইন করি। যেমন:
class Suitcase
def initialize
@locked = false
end
def locked? # Query methods should be named with a trailing `?`
@locked
end
def lock! # Methods which mutate state should have trailing `!`
@locked = true
end
end
suitcase = Suitcase.new
suitcase.locked? # false
suitcase.lock!
suitcase.locked? # true
নিল একটি ইংরেজি শব্দ, যার অর্থ "কিছুই না" বা "শূন্য"।
রুবিতে, একটি অবজেক্টের অনুপস্থিতি বোঝাতে nil ব্যবহৃত হয়।
অন্য প্রোগ্রামিং ভাষায় null বা none মান একই ধরনের ভূমিকা পালন করতে পারে।
# I do not have a favorite color
favorite_color = nil
রুবি যেকোনো ইনস্ট্যান্স ভ্যারিয়েবলকে প্রথমবার পেলেই ডিফল্ট মান হিসেবে nil দেয়, যতক্ষণ না অন্য কোনো মান দেওয়া হয়।
print @favourite_color # prints nil
@favourite_color = "blue"
print @favourite_color # prints "blue"
একটি অ্যামিউসমেন্ট পার্কের সাথে কাজ করতে গিয়ে উপস্থিতি ও রাইড পরিচালনার একটি সিস্টেম ডিজাইন করার জন্য আপনার হাতে একটি স্পেসিফিকেশন দেওয়া হয়েছে। আপনাকে Attendee (পার্কে ঘুরতে আসা ব্যক্তি) মডেল করার দায়িত্ব দেওয়া হয়েছে।
Attendee ক্লাসের Attendee#initialize মেথডটি ইমপ্লিমেন্ট করুন; এটি একটি উচ্চতা (সেন্টিমিটারে) নেবে এবং সেটি একটি ইনস্ট্যান্স ভ্যারিয়েবলে সংরক্ষণ করবে।
Attendee.new(106)
# => #<Attendee:0x000055c33e6c7e18 @height=106>
Attendee ক্লাসের Attendee#height গেটারটি ইমপ্লিমেন্ট করুন; এটি ইনস্ট্যান্সের উচ্চতা রিটার্ন করবে।
Attendee.new(106).height
# => 106
সব অ্যাটেনডি রাইড পাস কেনেননি, তবে তাদের পাস আছে কি নেই সেটি আমাদের জানা দরকার। Attendee ক্লাসের জন্য Attendee#pass_id গেটারটি ইমপ্লিমেন্ট করুন; এটি ইনস্ট্যান্সের pass_id রিটার্ন করবে, আর Attendee-র পাস না থাকলে nil রিটার্ন করবে।
Attendee.new(106).pass_id
# => nil
ইনস্ট্যান্সের স্টেট পরিবর্তন করতে Attendee#issue_pass! ইমপ্লিমেন্ট করুন এবং পাস আইডি ইনস্ট্যান্স ভ্যারিয়েবলে আর্গুমেন্টটি সেট করুন। এটি পাস আইডি রিটার্ন করবে।
attendee = Attendee.new(106)
attendee.issue_pass!(42)
attendee.pass_id
# => 42
কিছু অতিথি অনিরাপদ আচরণ করে নিয়ম ভাঙেন, তাই পার্ক চায় প্রয়োজনে পাস বাতিল করতে পারতে। ইনস্ট্যান্সের স্টেট পরিবর্তন করতে Attendee#revoke_pass! ইমপ্লিমেন্ট করুন এবং পাস আইডি nil সেট করুন।
attendee = Attendee.new(106)
attendee.issue_pass!(42)
attendee.revoke_pass!
attendee.pass_id
# => nil
Exercism-এ সাইন আপ করুন, Ruby ট্র্যাকের 21টি কনসেপ্ট121টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।