আপনি যদি রুবি ইনস্ট্যান্স ভেরিয়েবল সম্পর্কে জানতে চান, তারা কীভাবে কাজ করে এবং কেন তারা দরকারী।
আপনি সঠিক জায়গায় আছেন!
প্রথম প্রশ্ন…
ইনস্ট্যান্স ভেরিয়েবল কি?
রুবি প্রোগ্রামিং ভাষায়, ইনস্ট্যান্স ভেরিয়েবল হল এক ধরনের ভেরিয়েবল যা একটি @
দিয়ে শুরু হয় প্রতীক।
উদাহরণ :
@fruit
অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এর অংশ হিসাবে একটি ইনস্ট্যান্স ভেরিয়েবল ব্যবহার করা হয় অবজেক্টকে ডেটা সঞ্চয় করার জন্য তাদের নিজস্ব ব্যক্তিগত স্থান দিতে।
আমরা বলি যে বস্তুগুলি পারে :
- জিনিস করুন
- জিনিস জানুন
পদ্ধতিগুলি জিনিসগুলি ঘটায়, তারা জিনিসগুলি করে৷
৷ইনস্ট্যান্স ভেরিয়েবল ডেটা সঞ্চয় করে, তারা জিনিসগুলি জানে।
উদাহরণ :
আপনার যদি একটি Fruit
থাকে ক্লাস, আপনি জানতে চাইতে পারেন এটা কি ধরনের ফল, কি রঙ, ওজন ইত্যাদি।
এই সমস্ত গুণাবলী ইনস্ট্যান্স ভেরিয়েবলে পরিণত হয়।
@color
পছন্দ করুন , @type
, @weight
.
পরবর্তী :
আসুন কোডের উদাহরণ দেখি।
রুবি ইনস্ট্যান্স ভেরিয়েবল কিভাবে সংজ্ঞায়িত ও ব্যবহার করবেন
আপনি ক্লাসের ভিতরে ইনস্ট্যান্স ভেরিয়েবল সংজ্ঞায়িত করেন।
উদাহরণ :
ধরা যাক আমাদের একটি CoffeeMachine
আছে ক্লাস।
একটি কফি মেশিনে জল প্রয়োজন, তাই আপনি জানতে চাইতে পারেন কতটা জল পাওয়া যায়৷
৷আমরা এটা করতে পারি :
class CoffeeMachine def initialize @water = 100 end end
এই @water
আমাদের ইনস্ট্যান্স পরিবর্তনশীল।
আমরা 100
বরাদ্দ করি @water
-এ প্রাথমিক মান হিসাবে।
এখন :
যদি আমাদের একটি make_coffee
থাকে পদ্ধতি, আমরা ট্যাঙ্কে অবশিষ্ট জলের পরিমাণ কমাতে পারি।
class CoffeeMachine def initialize @water = 100 end def make_coffee @water -= 10 end end
লক্ষ্য করুন যে প্রতিটি CoffeeMachine
অবজেক্ট আপনি তৈরি করেন (new
দিয়ে ) @water
এর নিজস্ব ব্যক্তিগত মান থাকবে .
অর্থবোধক, তাই না?
কারণ আপনার কাছে 10টি প্রকৃত কফি মেশিন থাকলে, প্রতিটির নিজস্ব জলের স্তর থাকবে৷
তাই আমরা ইনস্ট্যান্স ভেরিয়েবল ব্যবহার করি!
কিভাবে ইনস্ট্যান্স ভেরিয়েবল অ্যাক্সেস করবেন
ইনস্ট্যান্স ভেরিয়েবলগুলি খুব কার্যকর হবে না যদি আপনি তাদের বর্তমান মান পড়তে না পারেন।
আপনি @
দিয়ে একটি উদাহরণ পরিবর্তনশীল মান পড়তে পারেন সিনট্যাক্স।
এরকম :
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
, কিন্তু আপনার এগুলো এড়ানো উচিত
Btw, আপনি ইনস্ট্যান্স ভেরিয়েবলের একটি তালিকা পেতে পারেন।
এরকম :
machine.instance_variables # [:@water]
আপনার কাছে এটি সহায়ক হতে পারে 🙂
আরো একটি জিনিস :
রেলে, ইনস্ট্যান্স ভেরিয়েবল (যেমন @books
), আপনার কন্ট্রোলার এবং ভিউয়ের মধ্যে ডেটা শেয়ার করতে ব্যবহৃত হয়।
তবে আপনি এখনও আপনার নিজের ক্লাসের জন্য এগুলিকে সাধারণভাবে ব্যবহার করতে পারেন৷
সারাংশ
আপনি রুবি ইনস্ট্যান্স ভেরিয়েবল সম্পর্কে শিখেছেন! এক ধরনের পরিবর্তনশীল যা @
দিয়ে শুরু হয় প্রতীক এবং এটি ক্লাসের অভ্যন্তরে ডেটা সঞ্চয় করার জায়গা দেওয়ার জন্য ব্যবহার করা হয়।
এখন অনুশীলন করতে ভুলবেন না, কোডের উদাহরণগুলি নিয়ে খেলুন এবং নিজের সাথে আসুন।
পড়ার জন্য ধন্যবাদ।