কম্পিউটার

রুবি ব্যক্তিগত এবং সুরক্ষিত পদ্ধতি:পদ্ধতির দৃশ্যমানতা বোঝা

রুবিতে একটি ব্যক্তিগত পদ্ধতি কি?

এটি এমন একটি পদ্ধতি যা আপনি শুধুমাত্র ক্লাসের ভিতরে থেকে কল করতে পারেন যেখানে এটি সংজ্ঞায়িত করা হয়েছে।

এটি আপনাকে আপনার পদ্ধতিতে অ্যাক্সেস নিয়ন্ত্রণ করতে দেয়৷

একটি রুবি পদ্ধতি হতে পারে :

  • ব্যক্তিগত
  • সর্বজনীন (ডিফল্ট)
  • সুরক্ষিত

ডিফল্টরূপে আপনার সমস্ত পদ্ধতি public .

যে কেউ এগুলি ব্যবহার করতে পারে!

কিন্তু আপনি একটি পদ্ধতি private করে এটি পরিবর্তন করতে পারেন অথবা protected .

এটি কেন দরকারী?

কারণ আপনি এই পদ্ধতিগুলি পরিবর্তন করা সহজ করতে পারেন৷

কল্পনা করুন আপনি একটি কোড লাইব্রেরি লিখছেন যা কর্মক্ষেত্রে কয়েকটি ভিন্ন প্রকল্পে ব্যবহার করা হবে।

যখন এই প্রকল্পগুলি আপনার লাইব্রেরি বাস্তবায়ন করবে, তখন তারা আপনার তৈরি করা ক্লাসগুলিতে কল করার পদ্ধতিগুলিকে চালু করবে৷

এখন :

আপনি একটি নতুন সংস্করণ প্রকাশ করেছেন...

কিন্তু আপনি একটি public নাম পরিবর্তন করার সিদ্ধান্ত নিয়েছেন পদ্ধতি।

এটি এই পদ্ধতি ব্যবহার করছে এমন প্রতিটি প্রকল্পে ত্রুটি তৈরি করতে চলেছে!

এটি মনে রাখবেন :

কম পাবলিক পদ্ধতি ব্যবহার করে আপনি আপনার ক্লাসের অভ্যন্তরে পরিবর্তনের স্বাধীনতা বাড়ান।

আসুন কয়েকটি কোড উদাহরণ দেখি!

রুবিতে ব্যক্তিগত পদ্ধতি বোঝা

আপনি কি কখনও "ব্যক্তিগত পদ্ধতি বলা" ত্রুটি বার্তা দেখেছেন?

এটি :

self.puts 123

# NoMethodError: private method `puts' called

তারপর আপনি একটি private ব্যবহার করার চেষ্টা করেছেন পদ্ধতিটি ভুল।

আপনি শুধুমাত্র একটি ব্যক্তিগত পদ্ধতি ব্যবহার করতে পারেন৷

উদাহরণ :

puts 123

এটি একই পদ্ধতি, তবে আপনাকে এটিকে এভাবে কল করতে হবে।

ব্যক্তিগত পদ্ধতিগুলিকে সর্বদা self প্রসঙ্গে বলা হয় .

অন্য কথায়…

আপনি শুধুমাত্র ব্যক্তিগত পদ্ধতি ব্যবহার করতে পারেন :

  • একই ক্লাসের অন্যান্য পদ্ধতি
  • পদ্ধতিগুলি প্যারেন্ট ক্লাস থেকে উত্তরাধিকারসূত্রে প্রাপ্ত
  • একটি মডিউল থেকে অন্তর্ভুক্ত পদ্ধতি

এর মানে হল যে আপনি ক্লাসের বাইরে থেকে ব্যক্তিগত পদ্ধতিতে কল করতে পারবেন না যা তাদের সংজ্ঞায়িত করে।

কারণ এর জন্য একটি "স্পষ্ট রিসিভার" প্রয়োজন।

যদি না…

আপনি send এর মত একটি পদ্ধতি ব্যবহার করেন এই নিয়ম বাইপাস করতে।

send(:puts, "apple")

আপনি কিভাবে একটি private সংজ্ঞায়িত করবেন পদ্ধতি?

এরকম :

def bacon
  "private bacon"
end

private :bacon

শব্দটি private এটি নিজেই একটি কীওয়ার্ড নয়, এটি Kernel-এ সংজ্ঞায়িত একটি পদ্ধতি মডিউল।

আপনার ব্যক্তিগত পদ্ধতিগুলি কোথায় রাখবেন

একটি ক্লাসে একাধিক ব্যক্তিগত পদ্ধতি থাকা স্বাভাবিক।

আপনি এই পদ্ধতিগুলি কোথায় রাখবেন?

এটি করুন৷ :

class Food
  def public_method
  end

  private

  def bacon
  end

  def orange
  end

  def coconut
  end
end

প্রতিটি উদাহরণ পদ্ধতি private পরে একটি ব্যক্তিগত পদ্ধতিতে পরিণত হয়৷

আপনি private_class_method :method_name ব্যবহার করতে পারেন যদি আপনি একটি ক্লাস পদ্ধতিকে ব্যক্তিগত হিসাবে সংজ্ঞায়িত করতে চান

এটি একটি সাধারণ প্যাটার্ন যা প্রথমে আপনার সমস্ত সর্বজনীন পদ্ধতি সংজ্ঞায়িত করুন, তারপরে আপনার private সংজ্ঞায়িত করুন ক্লাস শেষে একসাথে পদ্ধতি।

পাবলিক পদ্ধতি

রুবিতে সর্বজনীন হল ডিফল্ট পদ্ধতি দৃশ্যমানতা৷

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

def orange
  "Vitamin C"
end

আপনার যদি কোনো বস্তু food থাকে যা orange সংজ্ঞায়িত করে , আপনি এটিকে এভাবে কল করতে পারেন:

food.orange

যদি একটি পদ্ধতি ব্যক্তিগত বা সুরক্ষিত করা হয়, আপনি এটি আবার সর্বজনীন করতে পারেন৷

এরকম :

public :orange

একটি সুরক্ষিত পদ্ধতি কি?

সুরক্ষিত পদ্ধতি কম সাধারণ।

তারা private এর মত পদ্ধতি, কিন্তু আপনি তাদের একটি বস্তুতে কল করতে পারেন এবং শুধুমাত্র সরাসরি নয়।

যদি আপনি এই উদাহরণটি ব্যক্তিগত সহ চেষ্টা করুন আপনি একটি ত্রুটি পাবেন:

class Food
  def initialize(name)
    @name = name
  end

  def ==(other)
    name == other.name
  end

  protected

  attr_reader :name
end

food = Food.new("chocolate")

puts food == food

আপনি ত্রুটি পান কারণ name ব্যক্তিগত হবে তাই আপনি other.name করতে পারবেন না .

কিন্তু protected দিয়ে এই কোড কাজ করে!

ব্যক্তিগত বনাম সুরক্ষিত পদ্ধতি

এটাই পার্থক্য, সত্য যে protected পদ্ধতিটিকে private রাখে , কিন্তু এটি আপনাকে একটি বস্তুতে সেই পদ্ধতিটি কল করার অনুমতি দেয়।

ব্যক্তিগত সাথে আপনি শুধুমাত্র name করতে পারেন , সুরক্ষিত আপনি object.name করতে পারেন .

আপনি কখন সুরক্ষিত ব্যবহার করবেন?

শুধুমাত্র যদি আপনার একটি খুব নির্দিষ্ট কেস থাকে, যেমন সমান (== ) পদ্ধতি।

রুবি ডকুমেন্টেশন private ব্যবহার করার পরামর্শ দেয় protected এর পরিবর্তে যখনই সম্ভব।

এবং এই নোটটি আছে৷ :

"একটি সুরক্ষিত পদ্ধতি ধীর কারণ এটি ইনলাইন ক্যাশে ব্যবহার করতে পারে না।"

আমি এটি সম্পর্কে কৌতূহলী ছিলাম তাই আমি কিছু বেঞ্চমার্ক চালিয়েছি :

public:    2813891.9 i/s
private:   2699273.8 i/s
protected: 2572122.0 i/s

এটি পারফরম্যান্সে 8.5% এর পার্থক্য।

ভিডিও টিউটোরিয়াল

সারাংশ

আপনি রুবি পদ্ধতির দৃশ্যমানতা, সর্বজনীন, ব্যক্তিগত এবং সুরক্ষিত পদ্ধতি সম্পর্কে শিখেছেন। এগুলি রুবি কীওয়ার্ড নয়৷ , এগুলি Module-এ সংজ্ঞায়িত পদ্ধতি ক্লাস।

অনুগ্রহ করে এই পোস্টটি শেয়ার করুন যাতে আরো মানুষ এই বিষয়টি বুঝতে পারে!

পড়ার জন্য ধন্যবাদ 🙂


  1. রুবিতে সন্নিবেশ বাছাই বোঝা

  2. রুবির জিসাব পদ্ধতি ব্যবহার করার 3টি দুর্দান্ত উপায়

  3. রুবি ফাংশন এবং পদ্ধতি:আপনার নিজের সংজ্ঞায়িত কিভাবে

  4. রুবি ফ্রিজ পদ্ধতি - বস্তুর পরিবর্তনশীলতা বোঝা