define_method এবং send মেথডের ব্যবহার

Metaprogramming in Ruby (মেটাপ্রোগ্রামিং) - রুবি প্রোগ্রামিং (Ruby Programming) - Computer Programming

278

রুবি একটি অত্যন্ত শক্তিশালী এবং নমনীয় ভাষা, যেখানে আপনি define_method এবং send মেথডের মাধ্যমে dynamic method invocation এবং dynamic method definition করতে পারেন। এই দুটি মেথডের সাহায্যে কোডের নমনীয়তা, পুনঃব্যবহারযোগ্যতা এবং কার্যকারিতা বৃদ্ধি করা সম্ভব।


১. define_method

define_method রুবিতে একটি মেথডকে ডাইনামিকভাবে (dynamic) তৈরি করার জন্য ব্যবহৃত হয়। এর মাধ্যমে, আপনি কোনো নির্দিষ্ট মেথডের নাম এবং কোড ব্লক তৈরি করতে পারেন রানটাইমে, যা প্রচলিত পদ্ধতিতে করা যায় না।

Syntax:

define_method(:method_name) do |parameters|
  # method body
end

এটি সাধারণত ক্লাসের মধ্যে ডাইনামিক মেথড তৈরি করতে ব্যবহৃত হয়।

উদাহরণ:

class Person
  define_method(:greet) do |name|
    puts "Hello, #{name}!"
  end
end

person = Person.new
person.greet("Alice")  # Output: Hello, Alice!

এখানে, define_method মেথডটি greet নামক একটি নতুন মেথড তৈরি করছে। এই মেথডটি name প্যারামিটার নিয়ে একটি শুভেচ্ছা বার্তা প্রিন্ট করে।

define_method দিয়ে যে মেথড তৈরি হয়, তা instance method হিসেবে কাজ করে।

ব্যবহার:

  • Dynamic Method Creation: যখন আপনি জানেন না যে কোন মেথড তৈরি করবেন, তখন define_method ব্যবহার করতে পারেন।
  • DRY Principle: কোডের পুনঃব্যবহারযোগ্যতা নিশ্চিত করতে define_method সাহায্য করে।

২. send

send মেথডটি রুবির একটি শক্তিশালী ফিচার, যা আপনাকে একটি মেথডের নামকে ডাইনামিকভাবে কল করতে সক্ষম করে। এটি মূলত কোনো মেথডের নাম স্ট্রিং বা সিম্বল আকারে পাস করার মাধ্যমে সেই মেথড কল করতে ব্যবহৃত হয়। আপনি এটি দিয়ে প্রাইভেট এবং প্রটেক্টেড মেথডও কল করতে পারেন, যা সাধারণত মেনে চলা হয় না।

Syntax:

object.send(:method_name, *arguments)
  • method_name: কল করার মেথডের নাম (যা সিম্বল বা স্ট্রিং আকারে হতে পারে)।
  • *arguments: যেকোনো প্যারামিটার যেগুলি মেথডে পাস করা হবে।

উদাহরণ:

class Person
  def greet(name)
    puts "Hello, #{name}!"
  end
end

person = Person.new
person.send(:greet, "Bob")  # Output: Hello, Bob!

এখানে, send মেথডের মাধ্যমে greet মেথডটি ডাইনামিকভাবে কল করা হচ্ছে।

উদাহরণ: Private Method Call via send

class Person
  private

  def secret
    "This is a secret!"
  end
end

person = Person.new
puts person.send(:secret)  # Output: This is a secret!

এখানে, secret মেথডটি private হওয়া সত্ত্বেও send মেথডের মাধ্যমে এক্সেস করা হয়েছে।

ব্যবহার:

  • Dynamic Method Invocation: যখন মেথডের নাম runtime-এ পরিবর্তিত হতে পারে, তখন send ব্যবহার করা হয়।
  • Access Private Methods: send ব্যবহার করে আপনি private এবং protected মেথডও কল করতে পারেন।

define_method এবং send এর মধ্যে পার্থক্য

বৈশিষ্ট্যdefine_methodsend
কাজডাইনামিকভাবে একটি নতুন মেথড তৈরি করাইতিমধ্যে উপস্থিত কোনো মেথডকে ডাইনামিকভাবে কল করা
ব্যবহারমেথড তৈরি করতে ব্যবহৃত হয়মেথড কল করতে ব্যবহৃত হয়
মেথডের স্কোপএকটি ক্লাস বা অবজেক্টের মেথড হিসেবে তৈরি করা হয়অবজেক্টের যে কোন মেথড কল করা যায়
প্রাইভেট মেথডdefine_method শুধু public মেথড তৈরি করতে ব্যবহার করা হয়send প্রাইভেট এবং প্রটেক্টেড মেথডও কল করতে পারে
নাম প্যারামিটারdefine_method এর মধ্যে মেথড নামটি সিম্বল বা স্ট্রিং আকারে দেওয়া হয়send এর মধ্যে মেথড নাম স্ট্রিং বা সিম্বল আকারে দেওয়া হয়

সারসংক্ষেপ

  • define_method: ডাইনামিকভাবে মেথড তৈরি করতে ব্যবহৃত হয়। এটি ক্লাস বা অবজেক্টের মধ্যে নতুন মেথড সংজ্ঞায়িত করতে সাহায্য করে।
  • send: ডাইনামিকভাবে কোনো মেথড কল করতে ব্যবহৃত হয়। এটি মেথডের নাম এবং প্যারামিটারগুলি স্ট্রিং বা সিম্বল আকারে গ্রহণ করে।
  • define_method সাধারণত new methods তৈরি করতে ব্যবহৃত হয়, এবং send ব্যবহৃত হয় existing methods ডাইনামিকভাবে কল করতে।

এই দুটি মেথড রুবির ডাইনামিক প্রকৃতির সুবিধা নিয়ে আসে, এবং কোডের নমনীয়তা এবং কার্যকারিতা বৃদ্ধি করে।

Content added By
Promotion

Are you sure to start over?

Loading...