কম্পিউটার

কিভাবে attr_accessor, attr_writer এবং attr_reader ব্যবহার করবেন

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

আপনি যদি তাড়াহুড়ো করেন তবে নিচে স্ক্রোল করুন।

কারণ আমি ব্যাখ্যা করে শুরু করতে চাই:

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

ধরা যাক যে আপনার কাছে উদাহরণ ভেরিয়েবল সহ একটি ক্লাস আছে এবং আপনি সেগুলিকে বাইরের বিশ্বের কাছে প্রকাশ করতে চান৷

কিভাবে?

আপনাকে একটি পদ্ধতি নির্ধারণ করতে হবে।

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

কেন?

কারণ আপনি এটি না করলে আপনি একটি ত্রুটি পাবেন।

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

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 রিডার এবং WRITER উভয় পদ্ধতিই তৈরি করে।

  • attr_reader শুধুমাত্র পাঠক তৈরি করে।

  • attr_writer শুধুমাত্র লেখক তৈরি করে।

অন্য কথায় :

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

মাল্টিপল ইনস্ট্যান্স ভেরিয়েবল

একাধিক অ্যাট্রিবিউট পদ্ধতি সংজ্ঞায়িত করতে চান?

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

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

এরকম :

attr_reader :name, :value, :ready?

আপনি যত খুশি তৈরি করতে পারেন।

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

সারাংশ

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

এখন অনুশীলন করার সময়।


  1. রেলে ফ্ল্যাশ বার্তাগুলি কীভাবে ব্যবহার করবেন

  2. একটি ম্যাট্রিক্স কি এবং রুবিতে এটি কীভাবে ব্যবহার করবেন?

  3. রুবিতে স্ট্রাকট এবং ওপেনস্ট্রাক্ট কীভাবে ব্যবহার করবেন

  4. কিভাবে একটি রেল অ্যাপ্লিকেশনে OmniAuth-Twitter ব্যবহার করবেন