Method Missing এবং Dynamic Methods রুবি প্রোগ্রামিং ভাষার এমন দুটি বৈশিষ্ট্য যা অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিংয়ের মধ্যে স্বয়ংক্রিয়ভাবে নতুন মেথড তৈরি এবং মেথড কল হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়। এগুলি কোডের নমনীয়তা এবং ডাইনামিক আচরণকে বৃদ্ধি করতে সাহায্য করে। এই দুটি ধারণা একে অপরের সাথে সম্পর্কিত, তবে আলাদা কাজ সম্পন্ন করে।
১. Method Missing
method_missing রুবির একটি ম্যাজিক মেথড, যা যখন কোনো অবজেক্টে কল করা কোনো মেথড অবস্থিত না থাকে (অর্থাৎ সেই মেথডটি ডিফাইন করা না থাকে) তখন স্বয়ংক্রিয়ভাবে কল হয়। এটি রুবিতে ডাইনামিক মেথড কল হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়।
method_missing মেথডটি object বা class এর ডাইনামিক মেথড কল হ্যান্ডলিং করার জন্য একটি বিশেষ পদ্ধতি। যখন আপনি কোনো মেথড কল করেন যেটি ক্লাসে ডিফাইন করা নেই, তখন রুবি এই মেথডকে ট্রিগার করবে এবং আপনি এর মধ্যে কাস্টম আচরণ নির্ধারণ করতে পারবেন।
Syntax:
class MyClass
def method_missing(name, *args)
puts "Method #{name} was called with arguments #{args.inspect}"
end
end
obj = MyClass.new
obj.any_method(1, 2, 3) # Output: Method any_method was called with arguments [1, 2, 3]এখানে, method_missing মেথডটি any_method কল করার সময় কার্যকর হয় কারণ any_method ক্লাসে ডিফাইন করা নেই।
উদাহরণ:
class DynamicObject
def method_missing(name, *args)
puts "The method '#{name}' was called with arguments #{args}"
end
end
obj = DynamicObject.new
obj.some_method(10, 20) # Output: The method 'some_method' was called with arguments [10, 20]এখানে, some_method ক্লাসে ডিফাইন না থাকলেও, method_missing দ্বারা সেই মেথডের জন্য ডাইনামিক আচরণ নির্ধারণ করা হয়েছে।
method_missing এর ব্যবহার:
- অন্য মেথড কলের অনুকরণ: আপনি যখন কোনো মেথড ডিফাইন না করে তাও তা হ্যান্ডেল করতে চান।
- ডাইনামিক API: কিছু ডাইনামিক API তৈরি করতে যেমন অ্যাডহক মেথডগুলো তৈরি করা।
২. Dynamic Methods তৈরি
রুবিতে Dynamic Methods তৈরি করার মাধ্যমে আপনি রানটাইমে নতুন মেথড তৈরি করতে পারেন। রুবি একটি ডাইনামিক ভাষা হওয়ায়, এটি আপনাকে একটি ক্লাসের মধ্যে নতুন মেথড যোগ করতে বা ক্লাসের বাইরের মেথড কল করতে দেয়।
define_method ব্যবহার করে ডাইনামিক মেথড তৈরি করা
define_method মেথডটি রুবির একটি মেথড, যা আপনাকে ক্লাসের মধ্যে নতুন মেথড ডাইনামিকভাবে তৈরি করতে সাহায্য করে।
Syntax:
class MyClass
define_method(:method_name) do |*args|
# method body
end
endউদাহরণ:
class Person
def initialize(name)
@name = name
end
define_method(:greet) do
puts "Hello, #{@name}!"
end
end
p = Person.new("Alice")
p.greet # Output: Hello, Alice!এখানে, define_method ব্যবহার করে greet মেথড ডাইনামিকভাবে তৈরি করা হয়েছে। এখন এটি Person ক্লাসের ইনস্ট্যান্সে ব্যবহারযোগ্য।
define_method এর মাধ্যমে মেথডের নাম এবং বডি রানটাইমে নির্ধারণ করা:
class DynamicMethods
def initialize
@methods = { greet: "Hello!", farewell: "Goodbye!" }
end
@methods.each do |method_name, message|
define_method(method_name) do
puts message
end
end
end
obj = DynamicMethods.new
obj.greet # Output: Hello!
obj.farewell # Output: Goodbye!এখানে, greet এবং farewell মেথডগুলি রানটাইমে define_method দিয়ে তৈরি করা হয়েছে।
৩. Method Missing এবং Dynamic Methods এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Method Missing | Dynamic Methods |
|---|---|---|
| কাজ | মেথড কল করার সময় যদি মেথডটি ক্লাসে ডিফাইন না থাকে, তখন method_missing হ্যান্ডলিং হয়। | ক্লাসের মধ্যে রানটাইমে নতুন মেথড তৈরি করা হয়। |
| ব্যবহার | ডাইনামিক মেথড কল হ্যান্ডলিং এবং অপ্রত্যাশিত মেথডের জন্য কাস্টম আচরণ তৈরি করা। | নির্দিষ্ট ধরণের মেথড তৈরি করা, যেমন ডাইনামিক ফাংশনালিটি। |
| নির্দেশিকা | method_missing মেথডের মাধ্যমে ত্রুটি হ্যান্ডলিং। | define_method ব্যবহার করে নতুন মেথড তৈরি করা। |
| ফাংশনালিটি | ক্লাসে থাকা কোনো মেথড না থাকলে তা মিসিং হ্যান্ডল করা। | ক্লাসের মধ্যে নতুন মেথড কোড তৈরি করা। |
| নমুনা | method_missing(name, *args) | define_method(:method_name) |
সারসংক্ষেপ
- Method Missing: রুবি প্রোগ্রামিংয়ে
method_missingমেথডটি ব্যবহৃত হয় যখন কোনো মেথড কল করার সময় তা ক্লাসে ডিফাইন না থাকে। এটি ডাইনামিক মেথড হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়। - Dynamic Methods:
define_methodব্যবহার করে আপনি রানটাইমে নতুন মেথড তৈরি করতে পারেন। এটি ডাইনামিকভাবে কোড তৈরি করার জন্য ব্যবহৃত হয়।
Method Missing এবং Dynamic Methods উভয়ই ডাইনামিক প্রোগ্রামিংয়ের শক্তিশালী কৌশল, যা আপনার কোডকে আরো নমনীয় এবং শক্তিশালী করে তোলে।
Read more