কম্পিউটার টিউটোরিয়াল

রুবি অ্যাট্রিবিউট অ্যাকসেসর মাস্টারিং: attr_accessor, attr_writer এবং attr_reader ব্যবহার

এই আর্টিকেলটি রুবি অ্যাট্রিবিউট অ্যাকসেসর (attr_accessor) সম্পর্কে।

আপনি যদি হরিয়ে থাকেন, নিচে স্ক্রোল করুন।

কারণ আমি শুরু করতে চাই:

কেন আমরা অ্যাট্রিবিউট অ্যাকসেসর ব্যবহার করি!

মান लीजিয়ে আপনার একটি ক্লাস আছে ইনস্ট্যান্স ভেরিয়েবলসহ এবং আপনি সেগুলো বাইরের világে এক্সপোজ করতে চান।

কীভাবে?

আপনাকে একটি মেথড ডিফাইন করতে হবে।

শুধু মেথডই ইনস্ট্যান্স ভেরিয়েবল অ্যাক্সেস করতে পারে।

কেন?

কারণ আপনি যদি না করলে এরর পাবেন।

এখানে একটি উদাহরণ:

 class Food def initialize(protein) @protein = protein end end bacon = Food.new(21) bacon.protein # NoMethodError: undefined method `protein' 

NoMethodError হলো সেটি এরর যা আপনি পাবেন যখন আপনি প্রোপার সেটআপ ছাড়া protein-এর মান জানতে চান।

সমাধান কী?

আপনি নিজের মেথড এভাবে ডিফাইন করতে পারেন:

 class Food def protein @protein end end bacon.protein # 21 

অন্য OOP ভাষায় এটিকে "গেটার" মেথড বলা হয়। আপনি একটি মেথড ডিফাইন করেন যা আপনাকে ইনস্ট্যান্স ভেরিয়েবলের মান দেয়।

আপনি মান পরিবর্তন করতেও চাইতে পারেন।

সেজন্য, আপনাকে আরেকটি মেথড দরকার, এরকম:

 class Food def protein=(value) @protein = value end end bacon.protein = 25 

কল্পনা করুন আপনি অবজেক্টের ভিতরে একটি পোর্টাল খুলছেন যাতে আপনি মান পরিবর্তন করতে পারেন।

এটি ঠিক তাই করছে।

এখন:

এই ধরণের মেথড ডিফাইন করার জন্য কি কোনো ভালো উপায় নেই?

যেমন কোনো শর্টকাট?

হ্যাঁ!

সে আছে 🙂

সেইখানেই attr_accessor আসে।

রুবি attr_accessor উদাহরণ

আপনি রুবি-কে আপনার জন্য এই মেথডগুলো তৈরি করতে বলতে পারেন attr_accessor দিয়ে।

এভাবেই:

 class Food attr_accessor :protein def initialize(protein) @protein = protein end end 

এই লাইনটি দেখুন:

 attr_accessor :protein 

এটি একটি রুবি মেথড যা আপনার জন্য অন্য মেথডগুলো তৈরি করে।

কौনसे মেথড?

এই উদাহরণের জন্য, এটি তৈরি করে:

  • protein
  • protein=

এই মেথডগুলো সে মেথডগুলো যা আমরা আগে তৈরি করেছিলাম…

কিন্তু এখন আপনাকে সেগুলো টাইপ করতে হয় না।

এটি একটি শর্টকাট!

attr_accessor বনাম attr_reader

attr_accessor-এর পাশাপাশি আপনার কাছে অন্যান্য ধরনের অ্যাকসেসরও আছে।

ঠিক তিনটি:

  • attr_accessor
  • attr_reader
  • attr_writer

তাদের মধ্যে পার্থক্য কী?

যেকহুই, attr_accessor রিডার এবং রাইটার উভয় মেথড তৈরি করে।

  • attr_reader শুধু রিডার তৈরি করে।
  • attr_writer শুধু রাইটার তৈরি করে।

অন্য কথায়:

attr_reader-এ আপনি শুধু মান পড়তে পারবেন, পরিবর্তন করতে পারবেন না। attr_writer-এ আপনি শুধু মান পরিবর্তন করতে পারবেন কিন্তু পড়তে পারবেন না।

একাধিক ইনস্ট্যান্স ভেরিয়েবল

একাধিক অ্যাট্রিবিউট মেথড ডিফাইন করতে চান?

আপনি করতে পারেন।

কিন্তু আপনাকে সঠিক সিনট্যাক্স ব্যবহার করতে হবে।

এভাবেই:

 attr_reader :name, :value, :ready? 

আপনি যত ইচ্ছে ততগুলো তৈরি করতে পারেন।

ভিডিও টিউটোরিয়াল দেখুন

সারসংক্ষেপ

আপনি রুবিতে অ্যাট্রিবিউট অ্যাকসেসর সম্পর্কে শিখেছেন! ৩টি মেথডের একটি সেট (attr_accessor, attr_writer এবং attr_reader) ক্লাসের বাইরে থেকে ইনস্ট্যান্স ভেরিয়েবল অ্যাক্সেস ও সেট করার জন্য।

এখন প্র্যাকটিস করার পালা।


  1. রেলসে ফ্ল্যাশ মেসেজ মাস্টার করুন: একটি সম্পূর্ণ গাইড

  2. রুবি ম্যাট্রিক্স বুঝতে: ডেফিনিশন, অ্যাপ্লিকেশন এবং কীভাবে তৈরি করবেন

  3. রুবি Struct ও OpenStruct: দক্ষ ভ্যালু অবজেক্টস

  4. রেইলসে OmniAuth-Twitter দিয়ে টুইটার লগইন ইন্টিগ্রেট করুন: ধাপে ধাপে গাইড