আপনি যদি রুবি ইনস্ট্যান্স ভেরিয়েবল সম্পর্কে শিখতে চান, কীভাবে সেগুলো কাজ করে এবং কেন এগুলো উপকারী।
আপনি সঠিক জায়গায় এসেছেন!
প্রথম প্রশ্ন…
ইনস্ট্যান্স ভেরিয়েবল কী?
রুবি প্রোগ্রামিং ল্যাঙ্গুয়েজে, একটি ইনস্ট্যান্স ভেরিয়েবল হলো একটি ধরনের ভেরিয়েবল যা @ সিম্বল দিয়ে শুরু হয়।
উদাহরণ:
@fruit
অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP)-এ অবজেক্টগুলোর নিজস্ব প্রাইভেট স্পেস দিতে ইনস্ট্যান্স ভেরিয়েবল ব্যবহার করা হয় ডেটা সংরক্ষণের জন্য।
আমরা বলি অবজেক্টগুলো পারে:
- কাজ করতে (Do things)
- জিনিস জানতে (Know things)
মেথডগুলো কাজ করে, সেগুলো DO things।
ইনস্ট্যান্স ভেরিয়েবল ডেটা সংরক্ষণ করে, সেগুলো KNOW things।
উদাহরণ:
আপনার কাছে যদি একটি Fruit ক্লাস থাকে, আপনি জানতে চাইতে পারেন সেটি কী ধরণের ফল, কী রঙ, ওজন, ইত্যাদি।
এই সকল অ্যাট্রিবিউট হয়ে যায় ইনস্ট্যান্স ভেরিয়েবল।
@color, @type, @weight এর মত।
এগিয়ে যাই:
কোড উদাহরণ দেখা যাক।
রুবি ইনস্ট্যান্স ভেরিয়েবল ডিফাইন ও ব্যবহার কীভাবে করবেন
আপনি ক্লাসের ভিতরে ইনস্ট্যান্স ভেরিয়েবল ডিফাইন করেন।
উদাহরণ:
মান লিন আমাদের কাছে একটি CoffeeMachine ক্লাস আছে।
একটি কফি মেশিনে জল দরকার, তাই আপনি কত জল আছে সেটি জানতে চাইতে পারেন।
আমরা এইভাবে করতে পারি:
class CoffeeMachine
def initialize
@water = 100
end
end
এই @water হলো আমাদের ইনস্ট্যান্স ভেরিয়েবল।
আমরা @water-এ 100 অ্যাসাইন করলাম ইনিশিয়াল ভ্যালু হিসেবে।
এখন:
আমাদের কাছে যদি একটি make_coffee মেথড থাকে, আমরা ট্যাঙ্কে থাকা জলের পরিমাণ কমাতে পারি।
class CoffeeMachine
def initialize
@water = 100
end
def make_coffee
@water -= 10
end
end
লক্ষ্য করুন যে আপনি new দিয়ে প্রতিটি CoffeeMachine অবজেক্ট তৈরি করলে তার নিজস্ব প্রাইভেট ভ্যালু থাকবে @water-র জন্য।
মানে বুঝতেই পারছেন, ঠিক না?
কারণ আপনার যদি ১০টি আসল কফি মেশিন থাকে, তাহলে প্রতিটির নিজস্ব জল লেভেল থাকবে।
সেজন্য আমরা ইনস্ট্যান্স ভেরিয়েবল ব্যবহার করি!
ইনস্ট্যান্স ভেরিয়েবল এক্সেস কীভাবে করবেন
ইনস্ট্যান্স ভেরিয়েবল খুব উপকারী হত না যদি আপনি তাদের করেন্ট ভ্যালু পড়তে পারতেন না।
আপনি @ সিনট্যাক্স দিয়ে একটি ইনস্ট্যান্স ভেরিয়েবল ভ্যালু পড়তে পারেন।
এভাবে:
class CoffeeMachine
def initialize
@water = 50
end
def print_water_level
puts "Water Level: #{@water}"
end
end
machine = CoffeeMachine.new
machine.print_water_level # Water Level: 50
print_water_level মেথড @water ব্যবহার করে এর মান প্রিন্ট করে।
অ্যাট্রিবিউট অ্যাক্সেসর ব্যবহার করা
আপনি লক্ষ্য করতে পারেন যে আপনি ক্লাসের বাইরে থেকে ইনস্ট্যান্স ভেরিয়েবল এক্সেস করতে পারবেন না।
এটি ডিজাইন অনুযায়ী! এটিকে আমরা "এনক্যাপসুলেশন" বলি, একটি অবজেক্টের ডেটা বাইরের ওয়ার্ল্ড থেকে প্রোটেক্টেড থাকে, অন্য রুবি অবজেক্টের মত।
আমি কী বোঝাতে চাই:
machine = CoffeeMachine.new
machine.water # NoMethodError: undefined method `water' for #<CoffeeMachine:0x2d0a530>
machine.@water # SyntaxError: unexpected tIVAR, expecting '('
কিছু কেসে, আপনি এই এক্সেস দিতে চাইতে পারেন।
আপনি অবজেক্টের ডেটাতে একটি উইন্ডো খুলতে পারেন যাতে সেটি বাইরে থেকে উপলব্ধ হয়।
একটি পথ:
class CoffeeMachine
def initialize
@water = 100
end
def water
@water
end
end
machine = CoffeeMachine.new
machine.water # 100
এখানে কিছু স্পেশাল নেই। আমরা ভিতর থেকে ভ্যালু রিটার্ন করছি, যেখানে আমাদের এক্সেস রয়েছে।
আরেক অপশন হলো অ্যাট্রিবিউট রিডার ব্যবহার করা।
উদাহরণ:
class CoffeeMachine
attr_reader :water
def initialize
@water = 100
end
end
machine = CoffeeMachine.new
machine.water # 100
আগের মত একই জিনিস। পার্থক্য শুধু রুবি আপনার জন্য হার্ড ওয়ার্ক করবে এবং সেই water মেথডটি তৈরি করবে।
আপনার জানা দরকার কিছু জিনিস
ইনস্ট্যান্স ভেরিয়েবল সম্পর্কে কিছু জিনিস মনে রাখবেন যাতে আপনি मुশকিলে না পড়েন।
নোট করুন:
- একটি অনডিফাইনড ইনস্ট্যান্স ভেরিয়েবল সবসময়
nilরিটার্ন করে - ইনস্ট্যান্স ভেরিয়েবল
initializeমেথডে তৈরি করতে হয় না, কিন্তু সেটিই হলো সেগুলোর ইনিশিয়াল ভ্যালু দিয়ে পথ - ইনস্ট্যান্স ভেরিয়েবল এক্সেস করার এডভান্সড পথ রয়েছে, যেমন
instance_variable_get, কিন্তু আপনার এগুলো এড়াতে উচিত
বতে, আপনি ইনস্ট্যান্স ভেরিয়েবলের একটি লিস্ট পেতে পারেন।
এভাবে:
machine.instance_variables # [:@water]
আপনি এটাকে সহায়ক পেতে পারেন 🙂
আরেকটা জিনিস:
রেইলসে, ইনস্ট্যান্স ভেরিয়েবল (যেমন @books), আপনার কন্ট্রোলার এবং ভিউর মাঝপথে ডেটা শেয়ার করতে ব্যবহার হয়।
কিন্তু আপনি এগুলো নরম্যালি আপনার নিজের ক্লাসের জন্যও ব্যবহার করতে পারেন।
সারসংক্ষেপ
আপনি রুবি ইনস্ট্যান্স ভেরিয়েবল সম্পর্কে শিখেছেন! একটি ধরণের ভেরিয়েবল যা @ সিম্বল দিয়ে শুরু হয় এবং ক্লাসের ভিতরে ব্যবহার হয় তাদের ডেটা সংরক্ষণ করার জায়গা দিতে।
এখন প্র্যাক্টিস করা ভুলবেন না, কোড উদাহরণগুলোতে খেলুন এবং নিজের উদাহরণ তৈরি করুন।
পড়ার জন্য ধন্যবাদ।