কম্পিউটার

কিভাবে সমানতা বাস্তবায়ন করে রুবিতে দুটি বস্তুর তুলনা করা যায়

সমতা মানে দুটি জিনিস একই। রুবিতে, আমরা বস্তু এবং তাদের মান তুলনা করি যে তারা একই বস্তু কিনা।

প্রশ্নটি হল…

আপনি কিভাবে রুবিতে দুটি জিনিস তুলনা করবেন?

এরকম :

1 == 1

# true

আপনি সম্ভবত ইতিমধ্যেই এর সাথে পরিচিত...

কিন্তু আপনি কি জানেন যে == একটি পদ্ধতি এবং শুধু সিনট্যাক্স নয়?

অর্থ বড়।

আপনি তাদের আরও শক্তিশালী করতে আপনার নিজের ক্লাসে এই পদ্ধতি প্রয়োগ করতে পারেন। এবং এটিই আপনি এই পোস্টে শিখবেন!

দুটি বস্তুকে কি একই করে তোলে?

আপনি এই মত দুটি স্ট্রিং তুলনা করতে পারেন:

"foo" == "foo"

যদি শব্দ এবং অক্ষর একই, তারপর তারা সমান।

অভিব্যক্তিটি true প্রদান করে .

এটি কাজ করে কারণ String ক্লাস একটি == প্রয়োগ করে (দুটি সমান চিহ্ন) পদ্ধতি যা স্ট্রিং তুলনা করতে জানে।

কিন্তু String হলে কি হবে == বাস্তবায়ন করেনি ?

তারপর রুবি Object ব্যবহার করবে == এর বাস্তবায়ন , যা বস্তুর বিষয়বস্তুর পরিবর্তে বস্তুর পরিচয় পরীক্ষা করার জন্য ডিফল্ট।

উদাহরণ :

Object.new == Object.new # false
String.new == String.new # true

কারণ Object false ফেরত দেয় কারণ দুটি নতুন অবজেক্টের আলাদা অবজেক্ট আইডি রয়েছে।

String এর ক্ষেত্রে , যেহেতু এটি বিষয়বস্তুর উপর ভিত্তি করে তুলনা করে, এবং দুটি নতুন স্ট্রিং একই বিষয়বস্তু আছে (তারা খালি) এটি true ফেরত দেয় .

সমতা বাস্তবায়ন

এখন আসুন আপনি যা শিখেছেন তা ব্যবহার করুন আপনার নিজের ক্লাসগুলিকে তুলনা করতে সক্ষম হয়ে আরও শক্তিশালী করতে৷

== কে ধন্যবাদ পদ্ধতি…

আপনার নিজের ক্লাসের দুটি দৃষ্টান্ত সমান হওয়ার জন্য এর অর্থ ঠিক কী তা আপনি নির্ধারণ করতে পারেন।

উদাহরণ :

class Product
  attr_reader :name, :price

  def initialize(name, price)
    @name, @price = name, price
  end

  def ==(other)
    self.name  == other.name &&
    self.price == other.price
  end
end

p1 = Product.new('book', 49)
p2 = Product.new('book', 49)

p1 == p2 # true

== পদ্ধতি বলে যে নাম এবং মূল্য উভয়ই দুটি Product এর জন্য একই হতে হবে বস্তুকে সমান হিসাবে বিবেচনা করতে হবে।

মনে রাখবেন :

আপনি যদি এই পদ্ধতিটি বাস্তবায়ন না করেন (অথবা Comparable ব্যবহার করুন মডিউল, যা আমি আমার রুবি বইতে ব্যাখ্যা করেছি) দুটি বস্তুর মানের পরিবর্তে তাদের অবজেক্ট আইডি ব্যবহার করে তুলনা করা হবে।

এছাড়াও আমার উল্লেখ করা উচিত যে আপনি যদি একটি স্ট্রাকট ব্যবহার করেন তবে এটি ইতিমধ্যেই == প্রয়োগ করে আপনার জন্য।

ট্রিপল সমান সম্পর্কে কি?

আপনি হয়ত ভাবছেন যদি == একটি পদ্ধতি, হল === এছাড়াও একটি পদ্ধতি? এবং উত্তর হল হ্যাঁ 🙂

তাহলে দুটির মধ্যে পার্থক্য কী?

জাভাস্ক্রিপ্টে একটি স্পষ্ট পার্থক্য রয়েছে, যেখানে == বস্তুর ধরনগুলিকে একই রূপান্তর করার চেষ্টা করবে যদি সেগুলি (1) না হয় বনাম '1' ) এবং === 'কঠোর' সমতার জন্য।

কিন্তু রুবির মধ্যে এমন কিছু নেই। কি === মানে ক্লাসের উপর নির্ভর করে এটি বাস্তবায়ন করছে।

অনেক ক্ষেত্রে এটি শুধুমাত্র == এর একটি উপনাম .

যেমন String-এ এবং Object .

এখানে অন্তর্নির্মিত ক্লাসগুলির একটি টেবিল রয়েছে যা === দেয় একটি বিশেষ অর্থ:

ক্লাস অর্থ
পরিসীমা অবজেজ পরিসরের একটি উপাদান হলে সত্য ফেরত দেয়, অন্যথায় মিথ্যা হয়।
Regexp একটি স্ট্রিং এর সাথে regexp মেলান।
মডিউল সত্য দেখায় যদি obj মোডের একটি দৃষ্টান্ত বা এবং মোডের বংশধরদের একটির উদাহরণ হয়৷
Proc proc-এর প্যারামিটার যেমন Proc#call হিসাবে obj সহ ব্লককে আহ্বান করে . এটি একটি proc অবজেক্টকে when এর লক্ষ্য হতে দেয় একটি মামলার বিবৃতিতে ধারা৷

উপসংহার

এই পোস্টে আপনি শিখেছেন কিভাবে == প্রয়োগ করে আপনার ক্লাসগুলিকে আরও শক্তিশালী করা যায় পদ্ধতি আপনি == এর মধ্যে পার্থক্যও শিখেছেন এবং === .

এই পোস্টটি শেয়ার করতে ভুলবেন না যাতে আরও বেশি মানুষ এটি দেখতে পারে 🙂


  1. কিভাবে দুটি জাভাস্ক্রিপ্ট অবজেক্ট মার্জ করবেন?

  2. আইফোন/আইওএস-এ দুটি এনএসডেট কীভাবে তুলনা করবেন?

  3. PyTorch এ দুটি টেনসর কিভাবে তুলনা করবেন?

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