রুবিতে Enumerable মডিউল এমন একটি মডিউল যা বিভিন্ন ধরনের ইটারেবল (iterable) কনটেইনারের জন্য একাধিক সাধারণ মেথড প্রদান করে। এটি প্রধানত Array, Hash, Range, এবং অন্যান্য ইটারেবল ডেটা স্ট্রাকচারের জন্য ব্যবহৃত হয়। Enumerable মডিউলটি ইটারেশন এবং অন্যান্য উচ্চ স্তরের ফাংশনালিটি (যেমন map, reduce, select, ইত্যাদি) প্রদান করে, যা প্রোগ্রামিংয়ে কোড সংক্ষেপ এবং কার্যকরী করতে সহায়তা করে।
রুবি ভাষার বেশিরভাগ কালেকশন ক্লাস (যেমন Array, Hash, Range, ইত্যাদি) Enumerable মডিউল ইনক্লুড করে থাকে। এর মাধ্যমে ক্লাসগুলো ইটারেশন সম্পর্কিত অনেক সুবিধা পায় এবং তাদের সাথে সহজেই বিভিন্ন ধরনের কার্যক্রম করা যায়।
Enumerable মডিউল
Enumerable মডিউলটি ফাংশনাল প্রোগ্রামিংয়ের ধারণা অনুসরণ করে এবং এতে অনেক দরকারি মেথড অন্তর্ভুক্ত থাকে যা আপনার ডেটা সঞ্চয়গুলোর উপর কার্যক্রম করতে সহায়তা করে।
যতগুলো মেথড Enumerable মডিউলে সংজ্ঞায়িত থাকে, সেগুলো অধিকাংশ ক্ষেত্রে একটি block নেয় এবং collection এর প্রতিটি উপাদানের উপর প্রয়োগ করা হয়।
Enumerable মডিউল ব্যবহার
রুবির Enumerable মডিউল ব্যবহার করতে, ক্লাসে মডিউলটি ইনক্লুড করতে হবে। এটি সাধারণত ক্লাসের মধ্যে ডেটা ইটারেট করার জন্য স্বয়ংক্রিয়ভাবে কাজ করে। যেমন, Array এবং Hash ক্লাসগুলি এই মডিউলটি ইনক্লুড করে থাকে।
সিনট্যাক্স:
class MyClass
include Enumerable
endযেহেতু রুবির অধিকাংশ ডেটা স্ট্রাকচার (যেমন Array, Hash) ইতিমধ্যেই এই মডিউলটি ইনক্লুড করে থাকে, তাদের উপর সরাসরি Enumerable মেথড ব্যবহার করা যায়।
Common Methods in Enumerable
Enumerable মডিউল অনেক ধরনের মেথড সরবরাহ করে। নিচে কিছু গুরুত্বপূর্ণ এবং সাধারণভাবে ব্যবহৃত মেথডের আলোচনা করা হলো:
১. each
each মেথডটি একটি ব্লক গ্রহণ করে এবং কালেকশনের প্রতিটি উপাদানকে একে একে প্রক্রিয়া করে।
উদাহরণ:
[1, 2, 3].each do |number|
puts number * 2
endআউটপুট:
2
4
6এখানে, each ব্লককে প্রতি উপাদানের জন্য এক্সিকিউট করে।
২. map / collect
map বা collect মেথডটি প্রতিটি উপাদানকে প্রক্রিয়া করে এবং একটি নতুন অ্যারে রিটার্ন করে। এটি সাধারণত ট্রান্সফর্মেশন বা মান পরিবর্তন করতে ব্যবহৃত হয়।
উদাহরণ:
numbers = [1, 2, 3, 4]
squared_numbers = numbers.map { |number| number ** 2 }
puts squared_numbers # আউটপুট: [1, 4, 9, 16]এখানে, map মেথডটি প্রতি উপাদানকে স্কোয়ার করে নতুন অ্যারে তৈরি করেছে।
৩. select / filter
select (বা filter) মেথডটি একটি ব্লক নেয় এবং প্রতিটি উপাদান যাচাই করে, যেখানে true ফেরত দেওয়া উপাদানগুলো একটি নতুন অ্যারেতে সংগ্রহ করা হয়।
উদাহরণ:
numbers = [1, 2, 3, 4, 5]
even_numbers = numbers.select { |number| number.even? }
puts even_numbers # আউটপুট: [2, 4]এখানে, select মেথডটি কেবলমাত্র even (যোজ্য সংখ্যাগুলি) উপাদানগুলো নির্বাচন করেছে।
৪. reject
reject মেথডটি select এর বিপরীত কাজ করে। এটি ব্লকের ভিতরে false ফেরত দেয় এমন উপাদানগুলো ফিল্টার করে এবং একটি নতুন অ্যারে রিটার্ন করে।
উদাহরণ:
numbers = [1, 2, 3, 4, 5]
odd_numbers = numbers.reject { |number| number.even? }
puts odd_numbers # আউটপুট: [1, 3, 5]এখানে, reject মেথডটি শুধু odd (বিজোড়) সংখ্যাগুলোকে নির্বাচন করেছে।
৫. reduce / inject
reduce (বা inject) মেথডটি একটি একক মান তৈরির জন্য একটি অ্যারের উপাদানগুলিকে একত্রিত করে। এটি সাধারণত অ্যাকিউমুলেশন (যেমন যোগফল, গুণফল) করতে ব্যবহৃত হয়।
উদাহরণ:
numbers = [1, 2, 3, 4]
sum = numbers.reduce(0) { |accum, number| accum + number }
puts sum # আউটপুট: 10এখানে, reduce মেথডটি অ্যারের সব উপাদানকে একত্রিত করে তাদের যোগফল বের করেছে।
৬. all? / any?
all?: যদি সব উপাদান একটি নির্দিষ্ট শর্ত পূর্ণ করে, তবেtrueরিটার্ন করবে।any?: যদি কোনো একটি উপাদান শর্ত পূর্ণ করে, তবেtrueরিটার্ন করবে।
উদাহরণ:
numbers = [2, 4, 6]
puts numbers.all? { |number| number.even? } # আউটপুট: true
numbers = [2, 4, 7]
puts numbers.any? { |number| number.odd? } # আউটপুট: trueএখানে, all? সব উপাদানকে চেক করেছে যে তারা সব ইভেন কি না, এবং any? চেক করেছে যে কোনো উপাদান বিজোড় কি না।
Conclusion
- Enumerable মডিউল হল একটি রুবি মডিউল যা ইটারেশন, ফিল্টারিং, ম্যাপিং, অ্যাকিউমুলেশন ইত্যাদি অনেক কার্যক্রমের জন্য ব্যবহার করা যায়।
- রুবির অনেক ডেটা স্ট্রাকচার (যেমন Array, Hash, Range) এই মডিউলটি ইনক্লুড করে থাকে, যা তাদের উপর বিভিন্ন উচ্চ স্তরের কার্যক্রম পরিচালনা করতে সহায়তা করে।
map,select,reduce,eachইত্যাদি মেথডগুলি ডেটা ম্যানিপুলেশন এবং প্রোগ্রামিং কোডকে আরও সংক্ষিপ্ত ও কার্যকরী করতে ব্যবহৃত হয়।
এভাবে Enumerable মডিউল রুবি প্রোগ্রামিংয়ে কোড সহজ, পরিষ্কার এবং আরও কার্যকরী করতে সাহায্য করে।
Read more