ল্যাম্বদা এবং ফান্টেক্টর-শ্রেণীর মধ্যে পছন্দ একটি ট্রেড অফ।
ল্যাম্বডা থেকে প্রাপ্ত লাভটি বেশিরভাগ ক্ষেত্রে সিনট্যাক্টিক, বোয়াইলারপ্লেটের পরিমাণ হ্রাস করে এবং ধারণার সাথে সম্পর্কিত কোডটিকে ইনলাইন লেখার অনুমতি দেয়, এটি যে ফাংশনটি ব্যবহার করতে চলেছে (তাত্ক্ষণিকভাবে বা পরে)।
পারফরম্যান্স-ভিত্তিক, এটি কোনও ফান্টারের শ্রেণীর চেয়ে খারাপ নয় , যা একটি সি ++ স্ট্রাক্ট বা শ্রেণি যা একটি একক "পদ্ধতি" রয়েছে। প্রকৃতপক্ষে, সংকলকগুলি ল্যাম্বডাকে দৃশ্যের পিছনে একটি সংকলক-উত্পাদিত ফান্টেক্টর শ্রেণীর চেয়ে আলাদাভাবে আচরণ করে না।
// define the functor method somewhere
struct some_computer_generated_gibberish_0123456789
{
int operator() (int x) const
{
if (x == 2) return 5;
if (x == 3) return 6;
return 0;
}
};
// make a call
some_computer_generated_gibberish_0123456789 an_instance_of_0123456789;
int outputValue = an_instance_of_0123456789(inputValue);
আপনার কোড উদাহরণে, কর্মক্ষমতা অনুসারে এটি কোনও ফাংশন কলের থেকে আলাদা নয়, কারণ সেই ফান্ট্যাক্টর শ্রেণীর কোনও রাজ্য থাকে না (কারণ এটির খালি ক্যাপচারের ধারা রয়েছে), যাতে কোনও বরাদ্দ, নির্মাণকারী বা ধ্বংসের প্রয়োজন হয় না।
int some_computer_generated_gibberish_0123456789_method_more_gibberish(int x)
{
if (...) return ...;
return ...;
}
একটি বিচ্ছিন্নকারী ব্যবহার করে যে কোনও অ-তুচ্ছ সি ++ কোড ডিবাগ করা সর্বদা একটি কঠিন কাজ। ল্যাম্বডা ব্যবহার করে বা ব্যবহার না করেই এটি সত্য। এটি সি ++ সংকলক দ্বারা পরিশীলিত কোড অপ্টিমাইজেশনের কারণে ঘটে যার ফলে পুনরায় অর্ডারিং, ইন্টারলিভিং এবং ডেড কোড নির্মূলকরণ হয়।
নাম-mangling দৃষ্টিভঙ্গি কিছুটা বিস্বাদ, এবং ল্যামডা জন্য ডিবাগার সমর্থন এখনো তার শৈশবাবস্থায় । এটি কেবলমাত্র আশা করা যায় যে সময়ের সাথে সাথে ডিবাগার সমর্থন আরও উন্নত হবে।
বর্তমানে ল্যাম্বডা কোডটি ডিবাগ করার সর্বোত্তম উপায় হ'ল উত্স কোডের স্তরে, যেমন উত্স ফাইলের নাম এবং লাইন নম্বর উল্লেখ করে ব্রেকআপ পয়েন্টগুলি সমর্থন করে এমন একটি ডিবাগার ব্যবহার করা।