C++20 তে Ranges মডিউল যুক্ত করা হয়েছে, যা প্রোগ্রামারদের আরও সহজে এবং কার্যকরীভাবে ডেটা প্রক্রিয়াকরণ করতে সাহায্য করে। std::ranges মডিউল মূলত একটি নতুন স্ট্যান্ডার্ড লাইব্রেরি মডিউল, যা range-based operations সহজে করতে সহায়তা করে। এটি STL (Standard Template Library) এর অ্যালগরিদম এবং কনটেইনারের ওপর আরও কার্যকরীভাবে কাজ করার উপায় প্রদান করে এবং পাইপলাইনিং, ল্যাম্বডা এক্সপ্রেশন, এবং ভিউ এর মাধ্যমে কোডকে সংক্ষিপ্ত এবং পঠনযোগ্য করে।
Ranges এর মৌলিক ধারণা
Ranges মডিউল ডেটা বা কনটেইনারকে পাইপলাইন স্টাইলে প্রক্রিয়াকরণ করতে দেয়। Ranges ব্যবহার করে প্রোগ্রামাররা বিভিন্ন ফিল্টারিং, ট্রান্সফরমেশন, এবং স্লাইসিং অপারেশন একত্রে পাইপলাইন আকারে সম্পাদন করতে পারেন।
Ranges এর মাধ্যমে:
- কনটেইনার বা ডেটার উৎসের ওপর সরাসরি কাজ করা যায়।
- পাইপলাইন স্টাইলে বিভিন্ন অপারেশন একত্রে লেখা যায়, যা কোডকে সংক্ষিপ্ত করে।
- View এবং Action অপারেশন সরবরাহ করা হয়, যা ডেটার ওপর বিভিন্ন ধরণের ফিল্টারিং এবং ট্রান্সফরমেশন করতে সহায়ক।
Ranges মডিউলের মূল উপাদান
- Views: এটি কনটেইনার বা ডেটার উপর ফিল্টারিং, ট্রান্সফরমেশন ইত্যাদি অপারেশন সম্পন্ন করে।
std::ranges::viewsনেমস্পেসের অধীনে বিভিন্ন ভিউ পাওয়া যায়। - Actions: এটি সরাসরি ডেটার ওপর পরিবর্তনশীল অপারেশন সম্পাদন করে।
std::ranges::actionsনেমস্পেসের অধীনে পাওয়া যায়। - Algorithms:
std::rangesমডিউলে এমন অ্যালগরিদম আছে, যাstd::algorithmএর মতোই কাজ করে, তবে এগুলোrange-কে সরাসরি ইনপুট হিসেবে গ্রহণ করতে পারে।
Ranges ব্যবহার করার উদাহরণ
উদাহরণ ১: std::ranges::views::filter এবং std::ranges::views::transform
std::ranges::views::filter একটি ভিউ যা নির্দিষ্ট কন্ডিশন অনুসারে উপাদানগুলো ফিল্টার করে। std::ranges::views::transform প্রতিটি উপাদানে নির্দিষ্ট অপারেশন প্রয়োগ করে।
#include <iostream>
#include <vector>
#include <ranges>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// ফিল্টার করা যেসব সংখ্যা ৫ এর চেয়ে বড় এবং ট্রান্সফর্ম করা দ্বিগুণ করে
auto result = numbers | std::ranges::views::filter([](int n) { return n > 5; })
| std::ranges::views::transform([](int n) { return n * 2; });
// ফলাফল প্রিন্ট করা
for (int n : result) {
std::cout << n << " ";
}
return 0;
}আউটপুট:
12 14 16 18 20এখানে filter এবং transform ভিউ ব্যবহার করে শুধুমাত্র ৫ এর চেয়ে বড় সংখ্যাগুলোকে দ্বিগুণ করে দেখানো হয়েছে। পাইপলাইন অপারেশন ব্যবহার করে এটি আরও সহজ ও কার্যকরভাবে লেখা গেছে।
Ranges এর কিছু গুরুত্বপূর্ণ অপারেশন
std::ranges::views::filter: এটি একটি ভিউ যা কনটেইনারের উপাদানগুলো থেকে নির্দিষ্ট শর্ত পূরণকারী উপাদানগুলো নির্বাচন করে।std::ranges::views::transform: এটি একটি ভিউ যা প্রতিটি উপাদানের উপর নির্দিষ্ট অপারেশন প্রয়োগ করে এবং পরিবর্তিত মান রিটার্ন করে।std::ranges::views::take: এটি একটি ভিউ যা একটি রেঞ্জের প্রথম কিছু উপাদান নেয়।std::ranges::views::drop: এটি একটি ভিউ যা একটি রেঞ্জের প্রথম কিছু উপাদান বাদ দেয়।std::ranges::views::reverse: এটি একটি ভিউ যা একটি রেঞ্জকে উল্টিয়ে দেয়।
উদাহরণ: std::ranges::views::take এবং std::ranges::views::reverse
#include <iostream>
#include <vector>
#include <ranges>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// প্রথম ৫ টি উপাদান নেয়া এবং উল্টানো
auto result = numbers | std::ranges::views::take(5)
| std::ranges::views::reverse;
// ফলাফল প্রিন্ট করা
for (int n : result) {
std::cout << n << " ";
}
return 0;
}আউটপুট:
5 4 3 2 1এখানে take ভিউ ব্যবহার করে প্রথম ৫টি উপাদান নেয়া হয়েছে এবং reverse ভিউ ব্যবহার করে সেগুলো উল্টানো হয়েছে।
Ranges এবং Traditional Approach এর তুলনা
Ranges ব্যবহার করে প্রোগ্রামিং করার প্রধান সুবিধা হলো এটি কোডকে সংক্ষিপ্ত এবং আরও পাঠযোগ্য করে তোলে।
| Traditional Approach | Ranges Approach |
|---|---|
for লুপ এবং কন্ডিশন ব্যবহার প্রয়োজন | পাইপলাইন অপারেশনে কোড ছোট এবং স্পষ্ট |
| কোড জটিল এবং বড় হতে পারে | পাইপলাইনিং কোডকে সহজ ও পঠনযোগ্য করে |
| একাধিক ভেরিয়েবল বা লুপ প্রয়োজন | সরাসরি কনটেইনারের উপর কাজ করা যায় |
Ranges মডিউল ব্যবহারের সুবিধা
- সহজ কোডিং: Ranges পাইপলাইন অপারেশন প্রদান করে, যা কোডকে সংক্ষিপ্ত ও সহজ করে।
- কম্পোজিবিলিটি: Ranges মডিউলে বিভিন্ন অপারেশন একত্রে সহজে লেখা যায়।
- কোডের পুনঃব্যবহারযোগ্যতা: একবার ভিউ তৈরি করলে সেটি পুনরায় ব্যবহার করা যায়।
- উন্নত পঠনযোগ্যতা: পাইপলাইনিং এর মাধ্যমে কোড আরও পঠনযোগ্য এবং পরিচালনযোগ্য হয়।
উপসংহার
C++20 এর std::ranges মডিউল প্রোগ্রামারদের জন্য ডেটা ম্যানিপুলেশন সহজ এবং কার্যকর করেছে। এটি একটি পাইপলাইন ভিত্তিক অপারেশন, যা কনটেইনারের উপাদানগুলোর ওপর ফিল্টারিং, ট্রান্সফরমেশন, স্লাইসিং ইত্যাদি অপারেশন সহজে করতে সাহায্য করে। Ranges মডিউল ব্যবহার করে প্রোগ্রামিং আরও সুবিধাজনক ও পঠনযোগ্য হয়ে ওঠে, যা প্রোগ্রামারদের জন্য অনেক উপকারী।
Read more