سوال و جوابهای Lambda ای

به نام خدا

Lambda چیست؟ (نیم نمره :)‌)

یه کد اجرایی که می‌تونه داخل یک متغیر نگه‌داری بشه، به یه تابع ارسال بشه و خب طبیعتا هر موقع خواستید اجرا بشه.


یه Lambda مثال بزن عمو ببینه؟

بیه!


یه Lambda رو مستقیما موقع ساختن صدا بزن؟

بیه!

یه Lambda بریز توی یه متغیر بعد صدا بزن ببینم؟

بیه!

منظور از Lambda Introducer چیه؟

بیه! منظور همون براکت [] اول Lambda است که بهت اجازه میده مشخص کنی به چه متغیرهای بیرونی (متغیرهای غیر استاتیک) دوست داری داخل لامبدا هم دسترسی داشته باشی. چون به صورت پیش فرض داخل بدنه لامبدا دسترسی به متغیرهای غیر ایستای بیرونی نداری.

میتونی حرفی رو که زدی با یه کد نشون بدی؟

بله

نشون بده عمو ببینه؟

بیه!

چنین چیزی خطای کامپایل تولید خواهد کرد.

بین Lambda Introducer و بدنه Lambda چی میتونه قرار بگیره؟

پارامترهای ارسالی به Lambda، کلمه mutable، مقدار بازگشتی و… همشونم اختیاری هستند ولی اگه یکیشون رو گذاشتی حتما باید پرانتز مربوط به پارامترهای ورودی رو بذاری.

میتونی یه لامبدا با پارامتر ورودی مثال بزنی؟

بله

درد! مثال بزن؟

بیه!

Lambda میتونه چیزی return کنه؟

بله. میشه return type ش رو مشخص کرد میشه ام نکرد که اگه مشخص نکنی از مقداری که داره بازگشت داده میشه تایپش مشخص میشه.

خب دوتا لامبدا مثال بزن یکی بدون مشخص کردن تایپ مقدار بازگشتی یکی با!؟

بله. میشه return type ش رو مشخص کرد میشه ام نکرد که اگه مشخص نکنی از مقداری که داره بازگشت داده میشه تایپش مشخص میشه.

 

Capture چی بود؟

بله. داخل Lambda Introducer شما می‌تونید یک capture تعریف کنید واسه اینکه مشخص کنید به چه طریقی قصد دارید به متغیرهایی که به عنوان پارامتر به لامبدا نیومدند ولی در scope بیرونی لامبدا وجود دارند دسترسی داشت.

مثال بزن؟

مثلا توی کد زیر واسه این که مشخص کنید به چه طریقی قصد دارید به متغیر salam دسترسی داشته باشید باید یه capture داخل lambda introducer تعریف کنید

Capture ها چند نوع عن؟

دو نوع عن

۱٫[=] به این معناست که scope بیرونی لامبدا به صورت مقداری (pass by value) به داخل لامبدا ارسال میشه. پس در زمان تعریف لامبدا، شما به تمام متغیرها دسترسی خواندنی داری و هر تلاشی برای تغییر این متغیرها موجب خطای کامپایل میشه. پس مثال بالا باید به صورت زیر تغییر کنه.

۲٫ [&]  به این معناست که به تمام متغیرهایی که در زمان تعریف لامبدا وجود دارند دسترسی به صورت reference‌ داری. پس می‌تونی مقدار متغیرها رو تغییر بدی.

خب اگه مثلا دوتا متغیر باشن که یکی رو به صورت value بخوام یکی رو به صورت reference چیکار کنم.؟

یکی رو به صورت value بده یکی رو به صورت reference 😐

الان داخل لامبدا رشته salam رو میشه عوضش کرد ولی هرگونه تلاشی برای تغییر i پیگرد قانونی دارد.

چرا هی واسه تعریف لامبدا از کلمه auto استفاده می‌کنی؟؟

واسه اینکه تایپ یک لامبدا پیچیده است و من انسانی خسته!

خسته نباشی

ممنون 🙂!

 

 

۱۶,۳۹۰ total views, 13 views today

Print Friendly, PDF & Email

درباره ی سعید دادخواه

یه برنامه نویس !

همچنین ببینید

ریزه میزه – اندازه گیری زمان اجرای یک قسمت از برنامه در C++11

سلام دوستان امیدوارم حالتون خوب باشه. توی این قسمت قصد دارم که بهتون آموزش بدم …

2
دیدگاه بگذارید

avatar
1 Comment threads
1 Thread replies
0 دنبال کنندگان
 
Most reacted comment
داغ ترین نخ نظرات
2 کامنت گذاران
سعید دادخواهstackprogramer کامنت گذاران اخیر
  مشترک شو!  
جدیدترین قدیمی‌ترین دارای بیشترین امتیاز
میخوام باخبر شم از
stackprogramer
Guest

فقط این کاربرد لامبدا کجا است؟ چه مزیتی داره می تونم یک تابع تعریف کنم.