Modules এবং Namespaces রুবি প্রোগ্রামিং ভাষায় কোডের সংগঠন এবং পুনঃব্যবহারযোগ্যতার জন্য অত্যন্ত গুরুত্বপূর্ণ ধারণা। এগুলি কোডের পুনঃব্যবহারযোগ্য অংশ তৈরি করতে সাহায্য করে এবং একই নামের দ্বন্দ্ব (name clash) এড়াতে ব্যবহৃত হয়।
১. Modules
Modules হল কোডের পুনঃব্যবহারযোগ্য ব্লক যা methods, constants, এবং class গুলো ধারণ করতে পারে। রুবিতে, modules সাধারণত mixins (মেথড ভাগ করা) এবং namespaces (নাম সংরক্ষণ) তৈরির জন্য ব্যবহৃত হয়।
১.১ Modules এর ব্যবহার
- Method Grouping: আপনি একটি মডিউল তৈরি করতে পারেন এবং তার মধ্যে একাধিক মেথড সংজ্ঞায়িত করতে পারেন। পরে আপনি সেই মডিউলকে ক্লাসে অন্তর্ভুক্ত করতে পারেন।
- Namespaces: মডিউলগুলি একই নামের দ্বন্দ্ব (name clash) এড়াতে সাহায্য করে, যেমন একাধিক ক্লাস বা মেথডের মধ্যে একই নাম থাকতে পারে।
১.২ Module Definition এবং Inclusion
মডিউল তৈরি করতে module কিওয়ার্ড ব্যবহার করা হয়। ক্লাসে মডিউল ইনক্লুড করতে include কিওয়ার্ড ব্যবহার করা হয়।
module Greet
def say_hello
puts "Hello!"
end
end
class Person
include Greet # মডিউল ইনক্লুড করা হলো
end
person = Person.new
person.say_hello # আউটপুট: Hello!এখানে, Greet মডিউলে একটি মেথড say_hello সংজ্ঞায়িত করা হয়েছে এবং Person ক্লাসে include Greet দিয়ে মডিউলটি অন্তর্ভুক্ত করা হয়েছে।
১.৩ Module Constants
মডিউলে আপনি কনস্ট্যান্টও সংজ্ঞায়িত করতে পারেন।
module Constants
PI = 3.14159
end
puts Constants::PI # আউটপুট: 3.14159এখানে, Constants মডিউলে PI কনস্ট্যান্ট সংজ্ঞায়িত করা হয়েছে এবং মডিউলের নাম সহ কনস্ট্যান্টটি অ্যাক্সেস করা হয়েছে।
২. Namespaces
Namespaces হল একটি ধারণা যার মাধ্যমে একই নামের বিভিন্ন ক্লাস, মেথড, বা কনস্ট্যান্টকে আলাদা করা হয়। রুবিতে, মডিউলগুলি সাধারণত namespace হিসেবে কাজ করে, যা ক্লাস বা মেথডের নামের দ্বন্দ্ব (name clash) থেকে রক্ষা করে।
২.১ Namespace ব্যবহার
একটি মডিউল ব্যবহার করে আপনি নামের দ্বন্দ্ব এড়াতে পারেন, যাতে একই নামের ক্লাসগুলি আলাদা রাখা যায়।
module Animal
class Dog
def speak
puts "Woof!"
end
end
end
module Bird
class Dog
def speak
puts "Tweet!"
end
end
end
dog1 = Animal::Dog.new
dog1.speak # আউটপুট: Woof!
dog2 = Bird::Dog.new
dog2.speak # আউটপুট: Tweet!এখানে, Animal এবং Bird মডিউলগুলি আলাদা namespace হিসেবে কাজ করেছে, এবং দুটিই Dog নামক ক্লাসের মধ্যে ভিন্ন আচরণ প্রদান করেছে।
২.২ Namespace এবং Constant
নামস্থানের (namespace) মাধ্যমে কনস্ট্যান্টের নামের দ্বন্দ্বও এড়ানো যায়।
module MathConstants
PI = 3.14159
end
module PhysicsConstants
PI = 3.14
end
puts MathConstants::PI # আউটপুট: 3.14159
puts PhysicsConstants::PI # আউটপুট: 3.14এখানে, MathConstants এবং PhysicsConstants মডিউল দুটি আলাদা নামস্থানের (namespace) মতো কাজ করেছে এবং প্রতিটির PI কনস্ট্যান্ট ভিন্ন মান ধারণ করছে।
৩. Module as Mixins
রুবিতে Mixins হল এমন একটি কৌশল যা মডিউলের মাধ্যমে একটি ক্লাসে বিভিন্ন মেথড বা বৈশিষ্ট্য যোগ করতে সহায়তা করে। মডিউলগুলি একটি ক্লাসের মধ্যে ভিন্ন ভিন্ন বৈশিষ্ট্য বা ফাংশনালিটি যুক্ত করার জন্য ব্যবহৃত হয়, যা বহুলভাবে ব্যবহৃত হয়।
৩.১ Example of Mixins
module Swim
def swim
puts "Swimming"
end
end
module Fly
def fly
puts "Flying"
end
end
class Duck
include Swim
include Fly
end
duck = Duck.new
duck.swim # আউটপুট: Swimming
duck.fly # আউটপুট: Flyingএখানে, Swim এবং Fly মডিউল দুটি ক্লাস Duck এ মিক্সিন হিসেবে অন্তর্ভুক্ত করা হয়েছে, এবং সেই অনুযায়ী Duck ক্লাসে দুইটি নতুন মেথড যোগ করা হয়েছে।
৪. Module Method (Module Method)
রুবি মডিউলগুলির মধ্যে মেথড সংজ্ঞায়িত করতে self ব্যবহার করা হয়, যাকে "module method" বলা হয়। এই মেথডগুলি ক্লাসের কোনো ইনস্ট্যান্সের মাধ্যমে নয়, সরাসরি মডিউল থেকে কল করা হয়।
module Calculator
def self.add(a, b)
a + b
end
end
puts Calculator.add(5, 3) # আউটপুট: 8এখানে, Calculator মডিউলে self.add মেথড ব্যবহার করা হয়েছে, যা ক্লাসের ইনস্ট্যান্স ছাড়া সরাসরি মডিউল থেকেই কল করা হয়েছে।
সারসংক্ষেপ
- Modules: কোডের পুনঃব্যবহারযোগ্য অংশ তৈরি করার জন্য ব্যবহৃত হয়, যা মেথড, কনস্ট্যান্ট, বা ক্লাস ধারণ করতে পারে।
- Namespaces: নামের দ্বন্দ্ব এড়াতে মডিউল ব্যবহার করে একাধিক ক্লাস বা কনস্ট্যান্ট আলাদা রাখা যায়।
- Mixins: মডিউলগুলি ক্লাসে একাধিক ফাংশনালিটি যুক্ত করার জন্য ব্যবহৃত হয়।
- Module Method: মডিউলগুলিতে
selfব্যবহার করে মেথড তৈরি করা হয়, যা মডিউল থেকে সরাসরি কল করা যায়।
মডিউল এবং নেমস্পেস রুবির কোড সংগঠনকে আরও পরিষ্কার, পুনঃব্যবহারযোগ্য এবং নামের দ্বন্দ্ব থেকে মুক্ত রাখতে সাহায্য করে।
Read more