কম্পিউটার টিউটোরিয়াল

সি/সি++-এ ল্যাম্বডা ফাংশনের তাৎপর্য


ল্যাম্বডা ফাংশন − ল্যাম্বডা হলো একটি ইনলাইন ফাংশন যেকোনো বাইরের ইমপ্লিমেন্টেশন ছাড়া মেইন প্রোগ্রামের স্কোপের ভেতরে থাকে।

ল্যাম্বডা ফাংশন একটি ভেরিয়েবল দ্বারা ভ্যালু হিসেবে সংরক্ষণ করা যায়। ল্যাম্বডাকে একটি অবজেক্ট হিসেবে রেফার করা যায় যাকে ফাংশন দিয়ে কল করা যায় (কলড ফাংশটার)।

যখন কম্পাইলার ল্যাম্বডা ফাংশনের ডেফিনিশন দেখে, এটি সাধারণত ল্যাম্বডার জন্য একটি কাস্টম অবজেক্ট তৈরি করে।

একটি ল্যাম্বডা ফাংশনে নরমাল ফাংশন চেয়ে বেশি ফাংশনালিটি থাকে, উদাহরণস্বরূপ, এতে ব্যবহৃত ভেরিয়েবল ক্যাপচার করার মেথড থাকে। তবে, ক্যাপচার করা ভেরিয়েবলটি অবজেক্টের মেম্বার হিসেবে বিবেচনা হয়।

কখনো কখনো ল্যাম্বডা ফাংশনকে "ফাংশন অবজেক্ট" বলা হয় যার নিজস্ব স্কোপ থাকে এবং নরমাল ফাংশনের ভেতরে প্যারামিটার হিসেবে পাস করা যায়। ল্যাম্বডা ফাংশনের নিজস্ব লাইফটাইম থাকে।

[ ] - ক্যাপচার

( ) - প্যারামিটার (অপশনাল)

→ - রিটার্ন ভ্যালু (অপশনাল)

{...} - ফাংশন বডি।

ল্যাম্বডার সিনট্যাক্স

[ ]( int a) -> int { return a-1 ;};

ক্যাপচার − একটি ক্লজ जिसके মাধ্যমে ল্যাম্বডা ফাংশনকে সেই নির্দিষ্ট স্কোপ বা নেস্টেড ব্লকে উপলব্ধ ভেরিয়েবলগুলোর অ্যাক্সেস দেওয়া হয়।

উপলব্ধ ভেরিয়েবলের মান দুটি পদ্ধতিতে ক্যাপচার করা যায়,

  • নাম দিয়ে অবজেক্ট ক্যাপচার করা − নাম দিয়ে অবজেক্ট ক্যাপচার করলে ল্যাম্বডা ফাংশনের একটি লোকাল কপি তৈরি হয়।

নিচের উদাহরণ দিয়ে এই কনসেপ্ট বুঝা যাক −

int main(){    set s;    //Adding the elements to set    int i=20;    for_each(s.begin(),s.end(), [i](T& elem){       cout<<elem.getVal()*i<<endl;    } }

উপরের উদাহরণে, মান লোকাল কপি তৈরি করে ক্যাপচার করা হয়েছে।

  • রেফারেন্স দিয়ে অবজেক্ট ক্যাপচার করা − রেফারেন্স দিয়ে অবজেক্ট ক্যাপচার করলে ল্যাম্বডা ফাংশনের কনটেক্সট ম্যানিপুলেট হয়। তাই ফাংশন অবজেক্ট বা ল্যাম্বডা ফাংশন দ্বারা ক্যাপচার করা মান পরিবর্তন করা যায়।

নিচের উদাহরণ দিয়ে এটি বুঝা যাক −

int main(){    sets;    //Adding elements to the set    int result=0;    for_each(s.begin(),s.end(), [&result](&T elem){ result+= elem.getVal();});    cout<<result<<endl; }

মেম্বার ফাংশনের ভেতরে ল্যাম্বডা

আমরা জানি ল্যাম্বডা ফাংশন যেকোনো নরমাল ফাংশনের ভেতরে প্যারামিটার হিসেবে ব্যবহার করা যায়। উদাহরণস্বরূপ,

class func{ public:    func(set<T>s): s1(s){}    void func(){       remove_if(s1.begin(),s1.end(), [this](int i) ->bool {return (i<level);});    } private:    set<T>s1;    int result; };

  1. C/C++-তে rand() এবং srand() ফাংশন

  2. C/C++-তে putwchar() ফাংশন

  3. C/C++-তে mbsrtowcs() ফাংশন

  4. C/C++-তে system() ফাংশন: কম্যান্ড এক্সিকিউশন