دوباره خوش آمدید.
در این ویدیو قراره به **lambda expressions** نگاه کنیم.
و بعد اون به ما کمک می‌کنه تا **predicates** رو درک کنیم که بعد به ما کمک می‌کنه تا بفهمیم چطور از **FindAll** یا **Any** یا...
متدهای خیلی زیاد دیگه‌ای که در **C#** روی **list**ها قابل اجرا هستن و نیاز به پاس دادن **lambda** دارن، استفاده کنیم.
پس درک این موضوع واقعاً مهمه.
پس یک **lambda expression** از دو بخش تشکیل شده.
شماره یک **parameters** (پارامترها) هستن و شماره دو **expression** (عبارت) یا **statement block** (بلوک دستور).
و در سمت چپ **parameters** قرار دارند.
و بعد در سمت چپ این علامت اینجا. یعنی مساوی بزرگتر از.
راستی، این نماد به صورت **"می‌رود به"** یا **"تبدیل می‌شود به"** خوانده می‌شود.
پس **expression** یا عملی که باید انجام بشه، در سمت راست قرار داره.
پس اینجا این مثال رو داریم: **x** علامت مساوی بزرگتر از **x** ضربدر **x** نقطه ویرگول.
و اینطور خوانده می‌شود:
"یک ورودی **x** رو بگیر و اون رو به **x** ضربدر **x** تبدیل کن"، اوکی؟
پس **x** می‌رود به یا تبدیل می‌شود به **x** ضربدر **x**.
پس اگه این خط بسیار ساده رو بگیریم و بخوایم ازش یک **method** بسازیم، به این شکل خواهد بود.
داریم بهش می‌گیم **squaring** (به توان رساندن).
داریم یک **parameter** می‌گیریم و فقط می‌گیم **parameter** ضربدر **parameter** رو **return** کن.
پس **x** ضربدر **x** در این مورد، درسته؟
یا **num1** ضربدر **num1** در این مورد.
پس می‌تونستیم اون رو **x** هم بنامیم.
اما در نهایت زیاد مهم نیست.
اما ایده اینجا اینه که این با این یکیه، حداقل زمانی که اون رو مستقیماً اجرا می‌کنید.
پس یک **lambda expression** فقط یک راه بسیار کوتاه برای ایجاد یک **method** هست که هرگز فراخوانی نمی‌شه...
خارج از لحظه‌ای که داره استفاده می‌شه، چون ما نمی‌تونیم از این **lambda** استفاده کنیم یا بهش یک اسم بدیم و بعداً ازش استفاده کنیم، چون اگه بخوایم چندین بار ازش استفاده کنیم، باید از یک **method** برای اون استفاده کنیم.
اما **lambda** به ما اجازه می‌ده که نتایج رو خیلی سریع به دست بیاریم بدون اینکه مجبور باشیم یک **method** جداگانه ایجاد کنیم که به هر حال فقط یک بار فراخوانی می‌شه، مثلاً، و می‌تونیم فقط منطق رو خیلی سریع و...
خیلی دقیق در فقط یک خط کوتاه کد داشته باشیم.
پس گاهی اوقات شما فقط نیازی به نوشتن یک **method** جداگانه ندارید، و **lambda expression** به اندازه کافی خوبه.
و تا حدودی خوندنش خیلی آسونه چون می‌تونید ببینید کد مستقیماً چه کاری انجام می‌ده.
پس اگه واضحاً یک **method** خیلی پیچیده دارید که می‌خواید اجرا کنید، **lambda expression** راه درستی برای رفتن نیست.
اما در این مورد، یک **expression** بسیار ساده هست که می‌خوایم به دست بیاریم.
ما فقط می‌خوایم به دست بیاریم که هر ورودی که بهش می‌دیم، می‌خوایم ضرب دو تا رو به ما بده.
حالا چطور می‌تونیم این اصل رو روی **list**های خودمون اعمال کنیم؟
خب، قبلاً این کار رو کردیم.
پس چیزی که اینجا گفتیم اینه که گفتیم **x** تبدیل می‌شود به **x** بزرگتر مساوی **10**.
پس نتیجه این کد هر چه که باشه، هر چیزی که این **return** کنه، اون چیزیه که **x** بهش تبدیل می‌شه.
پس حالا ممکنه بگید خب این کمی گیج‌کننده‌ست چون ما علامت مساوی بزرگتر از رو داریم و بعد علامت بزرگتر از مساوی رو داریم.
خب قضیه اینه که این اینجا یک **lambda** هست.
می‌تونید ببینید وقتی نشانگر رو روش نگه می‌دارید.
این یک **lambda expression** هست.
پس این بخش کلیدی یک **lambda expression** هست.
شما باید علامت مساوی بزرگتر از رو برای یک **lambda expression** داشته باشید.
با این حال اگه می‌خواید از علامت بزرگتر مساوی استفاده کنید، اون یک عملیات **Boolean** هست.
پس می‌بینید اینجا اون رو مقایسه می‌کنه.
پس اگه می‌خواستید کوچکتر مساوی رو انجام بدید، می‌تونید اون رو به این شکل انجام بدید.
اما هرگز نمی‌تونید بگید مساوی کوچکتر از یا مساوی بزرگتر از، اوکی؟
پس اون کار نمی‌کنه.
پس اون همیشه یک **lambda expression** خواهد بود، همونطور که می‌بینید علامت مساوی بزرگتر از.
این در **C#** یا در بیشتر زبان‌های برنامه‌نویسی به عنوان دو کاراکتری تعریف شده که نشون می‌ده ما اینجا داریم در مورد یک **lambda expression** صحبت می‌کنیم.
خب چطور می‌تونستیم هر چیزی که اینجاست رو داخل یک متغیر ذخیره کنیم؟
بنابراین، می‌تونستیم از یک **predicate** استفاده کنیم.
و من قبلاً در مورد این کلمه کلیدی صحبت کردم.
درسته.
پس کاری که می‌تونیم انجام بدیم اینه که جلو بریم و از کلمه کلیدی **predicate** استفاده کنیم.
می‌تونید ببینید اینجاست.
این **predicate** به ما اجازه می‌ده، خب باید تعریف کنیم از چه نوعی هست.
این به ما اجازه می‌ده که ذخیره کنیم آیا چیزی بزرگتر هست یا نه.
پس می‌تونیم فقط بگیم **isGreaterThanTen** (بزرگتر از ده است)، مثلاً.
و بعد می‌تونیم یک **lambda expression** رو به اون اختصاص بدیم.
پس اینجا می‌تونم فقط جلو برم و این **lambda expression** خاص رو به این شکل به اون اختصاص بدم.
پس کاری که این انجام می‌ده اینه که **predicate** رو تعریف می‌کنه تا چک کنه آیا یک عدد بزرگتر از ده هست یا نه، به این شکل.
پس **predicate** از نوع **int** که **isGreaterThanTen** هست، نتیجه هر چیزی که اینجاست رو نگه خواهد داشت.
و همینجا می‌گه وقتی نشانگر رو روش نگه می‌دارید: "ما...
نشان‌دهنده **method**ی هست که مجموعه‌ای از معیارها رو تعریف می‌کنه و مشخص می‌کنه که آیا **object** مشخص شده اون معیارها رو برآورده می‌کنه یا نه،
و اگه **object** معیارهای تعریف شده در **method** که توسط این **delegate** نمایش داده می‌شه رو برآورده کنه، **true** برمی‌گردونه و در غیر این صورت **false**."
پس هر چیزی که ما اینجا پاس دادیم، اون رو داخل اون **isGreaterThan** **predicate** ذخیره خواهد کرد.
و بعد می‌تونیم از اون **isGreaterThan** **predicate** داخل **FindAll** **method** خودمون استفاده کنیم.
پس حالا داریم این دو مفهوم رو کنار هم میاریم که داریم از یک **lambda expression** استفاده می‌کنیم تا اون رو داخل یک **predicate** ذخیره کنیم، اوکی؟ و به این شکل.
می‌تونید کل مطلب رو بخونید که می‌گه توسط این **delegate** نمایش داده می‌شه، در غیر این صورت **false**.
حالا درک اینکه **delegate** چیه کمک می‌کنه، اما فعلاً باید بگم که بعداً اون رو پوشش خواهیم داد.
پس لطفاً در مورد اون جنبه خاص از زبان برنامه‌نویسی **C#** صبور باشید.
می‌بینید، ما داریم همین حالا هم کاملاً عمیق وارد زبان می‌شیم، و این شما رو واقعاً برای هر چیزی که ممکنه سر راهتون قرار بگیره، آماده می‌کنه.
راستی، اینجا دارم می‌گم بزرگتر از یا مساوی. اوکی.
پس حالا جایگزین این خواهد بود که فقط از شر این علامت مساوی خلاص بشیم.
پس حالا فقط اعدادی که بزرگتر از **10** هستن بخشی از اون خواهند بود، اوکی؟
حالا این **list** اینجا **higherEqualTen** حالا **higherTen** نامیده می‌شه، اوکی؟
پس من فقط قراره ازش به این شکل استفاده کنم.
و حالا چیزی که خواهیم داشت تمام اعدادی هست که بزرگتر از **10** هستن، **10** مستثنی می‌شه، اوکی؟
پس اگه این رو اجرا کنید خواهید دید **"all numbers ten and higher in our list"**: **15، 25 و 18**، اوکی؟
پس حالا خیلی چیزها کنار هم قرار گرفت.
ما **predicate** خودمون رو داشتیم و **lambda expression** رو داشتیم.
حالا مدیریت این کمی سخته.
پس بیایید جلو بریم و چند مثال دیگه در ویدیوهای بعدی داشته باشیم.