C++11-এ ল্যাম্বডা এক্সপ্রেশন (Lambda Expressions) একটি নতুন বৈশিষ্ট্য হিসেবে যোগ করা হয়েছে যা ফাংশন অবজেক্ট তৈরি করতে সহায়ক। এটি সাধারণত অস্থায়ী (anonymous) ফাংশন তৈরি করার জন্য ব্যবহৃত হয়, যা কোডের মধ্যে সরাসরি ফাংশনালিটি সরবরাহ করে এবং কোডকে আরও সংক্ষিপ্ত ও কার্যকরী করে।
ল্যাম্বডা এক্সপ্রেশনগুলি বিশেষভাবে উপকারী, যেখানে আপনি কোন ফাংশনকে ইনপুট হিসেবে দিতে চান অথবা ফাংশনটি এমন একটি জায়গায় দরকার যেখানে আপনি সেটিকে স্বতন্ত্রভাবে ডিফাইন করতে চান। এটি মূলত ফাংশন তৈরি করতে একটি সহজ ও সংক্ষিপ্ত উপায় প্রদান করে।
ল্যাম্বডা এক্সপ্রেশন এর সিনট্যাক্স:
[capture](parameter_list) -> return_type { function_body }১. Capture Clause (ক্যাপচার ক্লজ):
এই অংশটি একটি গুরুত্বপূর্ণ দিক যা বলে দেয় যে ল্যাম্বডা এক্সপ্রেশনটি বাইরের ভেরিয়েবলগুলিকে কিভাবে ব্যবহার করবে। এই অংশে বাইরের স্কোপ থেকে ভেরিয়েবলগুলোকে ল্যাম্বডায় আনা হয়।
[]: বাইরের ভেরিয়েবলগুলো ক্যাপচার করার জন্য ব্যবহৃত হয়।[=]: বাইরের সমস্ত ভেরিয়েবলকে কপি (by value) আনা।[&]: বাইরের সমস্ত ভেরিয়েবলকে রেফারেন্স (by reference) আনা।[var]: শুধুমাত্র নির্দিষ্ট ভেরিয়েবলকে আনা।[=, &var]: সমস্ত ভেরিয়েবল কপি (by value) আনা এবংvarকে রেফারেন্সে আনা।
২. Parameter List (প্যারামিটার লিস্ট):
ল্যাম্বডা এক্সপ্রেশন যেভাবে ফাংশন ডিফাইন করা হয়, সেখানে আপনি প্যারামিটার লিস্টে ফাংশনের ইনপুট আর্গুমেন্টগুলি উল্লেখ করতে পারেন। এটি ঐতিহ্যগত ফাংশন প্রোটোটাইপের মতোই।
৩. Return Type (রিটার্ন টাইপ):
-> return_type অংশে আপনি রিটার্ন টাইপ নির্ধারণ করতে পারেন। এটি ঐচ্ছিক, কারণ অনেক সময় কম্পাইলার আপনার কোড থেকে রিটার্ন টাইপটি স্বয়ংক্রিয়ভাবে অনুমান করতে পারে।
৪. Function Body (ফাংশন বডি):
এখানে আপনি ল্যাম্বডা ফাংশনের কার্যকর অংশ লিখবেন, যেমন আপনি সাধারণ ফাংশনে লেখেন।
ল্যাম্বডা এক্সপ্রেশন এর কিছু উদাহরণ:
উদাহরণ ১: সহজ ল্যাম্বডা এক্সপ্রেশন
#include <iostream>
int main() {
// ল্যাম্বডা এক্সপ্রেশন যা দুইটি ইনপুট সংখ্যা যোগ করে
auto add = [](int a, int b) { return a + b; };
std::cout << "Sum: " << add(5, 3) << std::endl; // আউটপুট হবে 8
return 0;
}আউটপুট:
Sum: 8উদাহরণ ২: বাইরের ভেরিয়েবল ক্যাপচার করা
#include <iostream>
int main() {
int x = 10, y = 20;
// বাইরের ভেরিয়েবলকে ক্যাপচার করে যোগফল প্রিন্ট করা
auto add = [x, y]() { return x + y; };
std::cout << "Sum: " << add() << std::endl; // আউটপুট হবে 30
return 0;
}আউটপুট:
Sum: 30উদাহরণ ৩: বাইরের ভেরিয়েবল রেফারেন্সে ক্যাপচার
#include <iostream>
int main() {
int x = 10;
// বাইরের ভেরিয়েবলকে রেফারেন্সে ক্যাপচার করা
auto increment = [&x]() { x++; };
increment(); // x এর মান 1 বৃদ্ধি হবে
std::cout << "Incremented x: " << x << std::endl; // আউটপুট হবে 11
return 0;
}আউটপুট:
Incremented x: 11উদাহরণ ৪: রিটার্ন টাইপ নির্ধারণ করা
#include <iostream>
int main() {
// রিটার্ন টাইপ স্পেসিফাই করে ল্যাম্বডা এক্সপ্রেশন
auto multiply = [](int a, int b) -> int { return a * b; };
std::cout << "Product: " << multiply(4, 5) << std::endl; // আউটপুট হবে 20
return 0;
}আউটপুট:
Product: 20উদাহরণ ৫: সমস্ত ভেরিয়েবল কপি করে ক্যাপচার করা
#include <iostream>
int main() {
int x = 5, y = 10;
// সমস্ত বাইরের ভেরিয়েবল কপি করে ক্যাপচার করা
auto sum = [=]() { return x + y; };
std::cout << "Sum: " << sum() << std::endl; // আউটপুট হবে 15
return 0;
}আউটপুট:
Sum: 15ল্যাম্বডা এক্সপ্রেশন এর সুবিধা:
- সংক্ষিপ্ত কোড: ল্যাম্বডা এক্সপ্রেশনগুলি কোড সংক্ষিপ্ত এবং সহজ করে, কারণ এখানে ফাংশন ডিফাইন করার জন্য একটি বড় ব্লক কোড লেখার দরকার হয় না।
- ফাংশন অবজেক্ট তৈরির সহজ উপায়: সাধারণ ফাংশন অবজেক্ট তৈরির জন্য ল্যাম্বডা এক্সপ্রেশন খুবই কার্যকরী এবং কোডের মধ্যে ব্যবহারযোগ্য।
- বাইরের ভেরিয়েবল অ্যাক্সেস: ল্যাম্বডার মাধ্যমে বাইরের স্কোপের ভেরিয়েবলগুলো অ্যাক্সেস করা যায়, যা কোডকে আরও নমনীয় করে তোলে।
- কার্যকরী ফাংশনালিটি: আপনি যে কোনো ফাংশন বা ল্যাম্বডা এক্সপ্রেশন ব্যবহার করে ম্যানিপুলেশন করতে পারেন, যেমন একটি কনটেইনারের উপাদানে কার্য সম্পাদন করা।
উপসংহার:
- ল্যাম্বডা এক্সপ্রেশন C++11 এর একটি শক্তিশালী বৈশিষ্ট্য, যা দ্রুত এবং কার্যকরীভাবে অস্থায়ী ফাংশন তৈরি করতে সহায়ক।
- এটি ফাংশন অবজেক্ট তৈরি করতে, বাইরের ভেরিয়েবল ক্যাপচার করতে, এবং সহজ কোড লেখার জন্য ব্যবহৃত হয়।
- ল্যাম্বডার মাধ্যমে আপনি কাস্টম অপারেশন এবং ফাংশনাল প্রোগ্রামিং সহজেই বাস্তবায়ন করতে পারেন।
Read more