Iterators রুবি প্রোগ্রামিং ভাষায় এমন একটি ফিচার যা দিয়ে আপনি collections (যেমন অ্যারে, হ্যাশ, রেঞ্জ) এর উপর লুপ চালাতে পারেন। Iterators বিভিন্ন ধরনের কাজ করতে ব্যবহৃত হয়, যেমন ডেটা পর্যালোচনা, পরিবর্তন, বা নির্বাচন। এগুলি রুবির একটি খুবই শক্তিশালী বৈশিষ্ট্য, যা কোডের কার্যকারিতা ও পাঠযোগ্যতা বৃদ্ধি করে।
রুবি প্রোগ্রামিংয়ে Iterators সাধারণত each, map, select, reject, reduce ইত্যাদি মেথড ব্যবহার করে ডেটা ম্যানিপুলেশন সম্পন্ন করা হয়।
১. each Iterator
each হল রুবির একটি খুব সাধারণ iterator, যা একটি অ্যারে বা হ্যাশের প্রতিটি উপাদান বা পেয়ার নিয়ে কাজ করতে ব্যবহৃত হয়। এই মেথডটি একটি ব্লক নেয় এবং ওই ব্লকটি প্রতিটি উপাদান নিয়ে একে একে কাজ করে।
Syntax:
collection.each do |item|
# ব্লক কোড যা প্রতিটি item নিয়ে কাজ করবে
endউদাহরণ:
# অ্যারে ডেটা
numbers = [1, 2, 3, 4, 5]
numbers.each do |num|
puts num * 2 # প্রতিটি সংখ্যাকে ২ দিয়ে গুণ করা হচ্ছে
endআউটপুট:
2
4
6
8
10এখানে, each ব্যবহার করে অ্যারের প্রতিটি উপাদানকে ডাবল করা হয়েছে।
২. map Iterator
map iterator ব্যবহার করে আপনি একটি নতুন অ্যারে তৈরি করতে পারেন, যা মূল অ্যারের প্রতিটি উপাদান নিয়ে ব্লকটি কার্যকর করে। এই iterator মূল অ্যারে পরিবর্তন না করে একটি নতুন অ্যারে রিটার্ন করে।
Syntax:
new_array = collection.map { |item| block_code }উদাহরণ:
# অ্যারে ডেটা
numbers = [1, 2, 3, 4, 5]
new_numbers = numbers.map { |num| num * 2 }
puts new_numbers.inspectআউটপুট:
[2, 4, 6, 8, 10]এখানে, map iterator মূল অ্যারের প্রতি উপাদানকে ২ দিয়ে গুণ করেছে এবং নতুন অ্যারে new_numbers তৈরি করেছে।
৩. select Iterator
select iterator ব্যবহার করে আপনি একটি ফিল্টারিং অপারেশন করতে পারেন। এটি একটি নতুন অ্যারে রিটার্ন করে, যা শুধুমাত্র সেই উপাদানগুলো নিয়ে থাকে যা ব্লকের শর্ত পূর্ণ করে।
Syntax:
new_array = collection.select { |item| block_condition }উদাহরণ:
# অ্যারে ডেটা
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
even_numbers = numbers.select { |num| num.even? }
puts even_numbers.inspectআউটপুট:
[2, 4, 6, 8]এখানে, select iterator ব্যবহার করে শুধুমাত্র জোড়া (even) সংখ্যাগুলিকে নির্বাচন করা হয়েছে।
৪. reject Iterator
reject iterator select এর বিপরীত কাজ করে। এটি একটি নতুন অ্যারে রিটার্ন করে, যা মূল অ্যারের সমস্ত উপাদান থেকে সেই উপাদানগুলো বাদ দিয়ে দেয়, যেগুলো ব্লকের শর্ত পূর্ণ করে।
Syntax:
new_array = collection.reject { |item| block_condition }উদাহরণ:
# অ্যারে ডেটা
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
odd_numbers = numbers.reject { |num| num.even? }
puts odd_numbers.inspectআউটপুট:
[1, 3, 5, 7, 9]এখানে, reject iterator ব্যবহার করে শুধু অজোড়া (odd) সংখ্যাগুলো রাখা হয়েছে।
৫. reduce Iterator
reduce (বা inject) iterator ব্যবহার করে আপনি একটি অ্যারের উপাদানগুলোর মধ্যে একটি একক মান তৈরির জন্য একটি সমন্বিত কার্যকলাপ সম্পন্ন করতে পারেন (যেমন যোগফল, গুণফল ইত্যাদি)।
Syntax:
result = collection.reduce(initial_value) { |accumulator, item| block_code }initial_value: এটি একটি প্রাথমিক মান যা প্রথমে অ্যাকুমুলেটর হিসাবে ব্যবহৃত হবে (যদি প্রয়োজন হয়)।accumulator: এটি একটি চলমান মান, যা প্রতিটি ব্লক কলের পর আপডেট হয়।item: এটি হচ্ছে প্রতিটি উপাদান।
উদাহরণ:
# অ্যারে ডেটা
numbers = [1, 2, 3, 4, 5]
sum = numbers.reduce(0) { |total, num| total + num }
puts sumআউটপুট:
15এখানে, reduce iterator অ্যারের সব সংখ্যার যোগফল বের করেছে। প্রথমে 0 মানটি অ্যাকুমুলেটর হিসেবে কাজ করেছে এবং পরে প্রতিটি সংখ্যার সাথে যোগফল করা হয়েছে।
৬. each_with_index Iterator
each_with_index iterator ব্যবহার করে আপনি প্রতিটি উপাদান এবং তার সাথে সম্পর্কিত ইনডেক্স (অথবা অবস্থান) একসাথে পেতে পারেন।
Syntax:
collection.each_with_index { |item, index| block_code }উদাহরণ:
# অ্যারে ডেটা
colors = ["red", "green", "blue", "yellow"]
colors.each_with_index do |color, index|
puts "Color ##{index + 1}: #{color}"
endআউটপুট:
Color #1: red
Color #2: green
Color #3: blue
Color #4: yellowএখানে, each_with_index iterator ব্যবহার করে প্রতিটি উপাদান এবং তার ইনডেক্স (অবস্থান) প্রদর্শিত হচ্ছে।
সারসংক্ষেপ
each: একটি অ্যারের প্রতিটি উপাদানের উপর লুপ চালায় এবং প্রতিটি উপাদান নিয়ে কোড কার্যকর করে।map: একটি নতুন অ্যারে তৈরি করে, যেখানে মূল অ্যারের প্রতিটি উপাদান নিয়ে কিছু পরিবর্তন করা হয়।select: নির্দিষ্ট শর্ত পূর্ণ করা উপাদানগুলো নির্বাচন করে একটি নতুন অ্যারে তৈরি করে।reject:selectএর বিপরীতে কাজ করে, শর্ত পূর্ণ করা উপাদানগুলো বাদ দিয়ে নতুন অ্যারে তৈরি করে।reduce: অ্যারের উপাদানগুলোর মধ্যে একটি একক মান (যেমন যোগফল) তৈরি করে।each_with_index: প্রতিটি উপাদান এবং তার ইনডেক্স (অবস্থান) নিয়ে কাজ করে।
এগুলি রুবি প্রোগ্রামিংয়ে ডেটা ম্যানিপুলেশন সহজ এবং কার্যকরী করতে সহায়তা করে। Iterators এর মাধ্যমে ডেটার উপর বিভিন্ন অপারেশন খুবই দ্রুত এবং ক্লিনভাবে সম্পন্ন করা যায়।
Read more