কম্পিউটার

রুবি-তে উত্তরাধিকারসূত্রে প্রাপ্ত হুক পদ্ধতি - এবং আরও প্যারেন্টিং পাঠ

হ্যালো শিশু এবং পিতামাতা, আহেম রুবিস্ট। পূর্ববর্তী একটি নিবন্ধে, আমরা পূর্বপুরুষ শৃঙ্খলে প্রবেশ করেছি। আজকের পোস্টে, আমরা প্যারেন্টিং এবং উত্তরাধিকার সম্পর্কে আরও গভীরে ডুব দেব। আমরা উত্তরাধিকার সূত্রে প্রাপ্ত হুক পদ্ধতিটি অন্বেষণ করব এবং উত্তরাধিকার প্রতিরোধের দিকে নজর দেব।

যখন বাচ্চারা 101 উত্তরাধিকারী হয়:উত্তরাধিকারসূত্রে প্রাপ্ত হুক পদ্ধতি

চলুন শুরু করা যাক কিভাবে পিতৃত্ব ঘোষণা করা হয়। রুবি একটি ক্লাসের সাথে ইন্টারঅ্যাক্ট করার একটি সুন্দর উপায় প্রদান করে যখন এটিকে অন্য ক্লাসের অভিভাবক হিসাবে ঘোষণা করা হয়।

class Parent
  def self.inherited(subclass)
    puts "#{subclass} inherits from Parent"
  end
end
 
class Child < Parent
end

এই কোডটি চালানোর ফলে "বাবা-মায়ের কাছ থেকে সন্তানের উত্তরাধিকার" প্রিন্ট হয়, যেমন Parent.inherited পদ্ধতি বলা হয় যখন Child Parent থেকে ক্লাস ইনহেরিট . মনে রাখবেন এই পদ্ধতিটি সাবক্লাসকে প্যারামিটার হিসেবে নেয়—Child , আমাদের ক্ষেত্রে. এই প্রক্রিয়াটি আপনাকে প্যারেন্ট ক্লাসের সাথে ইন্টারঅ্যাক্ট করার অনুমতি দেয় শুধুমাত্র যদি এটি উত্তরাধিকার সূত্রে প্রাপ্ত হয় তবে আচরণের একটি সেট সংজ্ঞায়িত করতে। আচরণ দ্বারা, এই প্রেক্ষাপটে, আমরা উত্তরাধিকারসূত্রে বা উত্তরাধিকারসূত্রে প্রাপ্ত ভেরিয়েবল, পদ্ধতি এবং ধ্রুবকগুলিকে পরিবর্তন করা, সংজ্ঞায়িত করা বা মুছে ফেলাকে বুঝি৷

এখন, parent_name সংজ্ঞায়িত করা যাক উড়তে থাকা পদ্ধতি:

class Parent
  def self.inherited(subclass)
    subclass.define_method :parent_name do
      "Daddy"
    end
  end
end
 
class Child < Parent
end
 
Child.new.parent_name # => "Daddy"

এখানে, আমরা Child-এ একটি পদ্ধতি সংজ্ঞায়িত করি ক্লাস যখন এটি Parent থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় ক্লাস, কিন্তু সেই পদ্ধতিটি সরাসরি Parent এ যোগ না করে ক্লাস পরিবর্তে, এটি শুধুমাত্র তখনই সংজ্ঞায়িত করা হয় যখন অন্য শ্রেণী Parent থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় .

ঠিক আছে, আমরা তত্ত্বটি কভার করেছি, এখন আসুন একজন রুবিস্টের জীবনের আরও বাস্তবসম্মত উদাহরণ দেখে নেওয়া যাক।

শ্রেণির উত্তরাধিকার প্রতিরোধ করুন

রুবি অন রেলে, ডাটাবেস স্থানান্তরগুলি ActiveRecord::Migration দ্বারা পরিচালিত হয় ক্লাস আসুন সরাসরি এই ক্লাস থেকে উত্তরাধিকারী হওয়ার চেষ্টা করি।

class AddFirstnameToUsers < ActiveRecord::Migration
end
 
# => StandardError (Directly inheriting from ActiveRecord::Migration is not supported..)

এই ত্রুটিটি উত্থাপিত হয়েছে কারণ Ruby on Rails একটি মেকানিজম প্রদান করে যা আমাদের এই শ্রেণী থেকে উত্তরাধিকারী হতে বাধা দেয়। তাহলে কেন রুবি অন রেল এই প্রক্রিয়াটি বাস্তবায়ন করেছে?

একটি মাইগ্রেশন দৃঢ়ভাবে রুবি অন রেলের একটি নির্দিষ্ট সংস্করণের সাথে মিলিত হয়। প্রকৃতপক্ষে, এই শ্রেণীর দ্বারা প্রদত্ত API 2 সংস্করণের মধ্যে সামান্য পরিবর্তন করতে পারে। সুতরাং, যখন আপনি Ruby on Rails আপগ্রেড করবেন তখন ব্রেকিং মাইগ্রেশন এড়াতে, ফ্রেমওয়ার্ক আপনাকে ActiveRecord::Migration ক্লাসের একটি নির্দিষ্ট সংস্করণ বেছে নিতে বাধ্য করে। এটি আপনার মাইগ্রেশনের মসৃণ চলমান নিশ্চিত করে।

class AddFirstnameToUsers < ActiveRecord::Migration[4.2]
end

উপরের উদাহরণে, আমাদের মাইগ্রেশন ActiveRecord::Migration এর সাথে মিলিত হয়েছে Ruby on Rails-এর সংস্করণ 4.2 সহ API প্রদান করা হয়েছে। সুতরাং, এমনকি যদি আমরা আমাদের অ্যাপ্লিকেশনটিকে 5.0 সংস্করণে আপগ্রেড করি, তবুও আমাদের স্থানান্তরগুলি এখনও মসৃণভাবে চলবে কারণ সেগুলি এখনও ActiveRecord::Migration-এর সংস্করণ 4.2 এর সাথে চলবে। API।

উত্তরাধিকার প্রতিরোধ কিভাবে কাজ করে

এখন আমরা বুঝতে পারছি কেন উত্তরাধিকার এখানে আটকানো হয়েছে, চলুন দেখি কিভাবে এই ActiveRecord::Migration উত্তরাধিকার প্রতিরোধ করে। সমস্ত যুক্তি ActiveRecord::Migration.inherited-এ সংজ্ঞায়িত করা হয়েছে পদ্ধতি।

class AddFirstnameToUsers < ActiveRecord::Migration[4.2]
end

যখন আমাদের AddFirstnameToUsers ActiveRecord::Migration থেকে ক্লাস ইনহেরিট , ActiveRecord::Migration.inherited হুক পদ্ধতি বলা হয়।

module ActiveRecord
  class Migration
    def self.inherited(subclass) #:nodoc:
      super
      if subclass.superclass == Migration
        raise StandardError, "Directly inheriting from ActiveRecord::Migration is not supported. " \
          "Please specify the Rails release the migration was written for:\n" \
          "\n" \
          "  class #{subclass} < ActiveRecord::Migration[4.2]"
      end
    end
  end
end

আমরা দেখতে পাচ্ছি, এই হুক পদ্ধতি সাবক্লাস (AddFirstnameToUsers ) সরাসরি ActiveRecord::Migration থেকে উত্তরাধিকারসূত্রে প্রাপ্ত . যদি এটি করে, একটি ত্রুটি উত্থাপিত হয়. উত্তরাধিকার নিয়ন্ত্রণের জন্য এটি নিখুঁত এন্ট্রি পয়েন্ট।

উপসংহার

আজ, আমরা উত্তরাধিকার এবং উত্তরাধিকার প্রতিরোধের মূল বিষয়গুলি কভার করেছি। আমরা উত্তরাধিকারসূত্রে প্রাপ্ত হুক পদ্ধতিটি কভার করেছি এবং দেখেছি কিভাবে উত্তরাধিকার সূত্রে প্রাপ্ত/উত্তরাধিকারী শ্রেণির সাথে ইন্টারঅ্যাক্ট করার সময় এটি খুব সহজ হতে পারে।

বাস্তব-বিশ্বের সেটিংয়ে, উত্তরাধিকার নিয়ে খেলার সময় সতর্ক থাকুন। আপনি একটি বিদ্যমান পদ্ধতি বা শ্রেণী অপসারণ বা ওভাররাইড করার সময় খুব সতর্ক থাকুন। এর ফলে কিছু অবাঞ্ছিত পার্শ্বপ্রতিক্রিয়া হতে পারে। বাচ্চারা আপনাকে বাবা বলা বন্ধ করতে পারে।

এবং ভয়াল, এটি আজকের জন্য আমাদের পোস্টের সমাপ্তি!


  1. রুবি আলিয়াস কীওয়ার্ড কীভাবে ব্যবহার করবেন

  2. রুবি গ্রেপ পদ্ধতি কীভাবে ব্যবহার করবেন (উদাহরণ সহ)

  3. রুবি মানচিত্র পদ্ধতি কীভাবে ব্যবহার করবেন (উদাহরণ সহ)

  4. রুবিতে ডেকোরেটর ডিজাইন প্যাটার্ন