سلام
از عزیزان امکان داره کسی توضیحی به ما بدهند؟ نحوه و چرایی استفاده؟
(در مورد این عملگر)
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
سلام
از عزیزان امکان داره کسی توضیحی به ما بدهند؟ نحوه و چرایی استفاده؟
(در مورد این عملگر)
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
سمبل => به عملگر لامبدا معروفه و صریحا به کامپایلر اعلان می کند که عبارت مورد نظر از نوع لامبدا هست : از این عملگر در عبارات لامبدا برای جدا کردن متغیرهای ورودی که در سمت چپ قرار دارند (همان پارامترهای ورودی به یک تابع در نظر بگیر) از بدنه لامبدا که در سمت راست قرار دارد (همان کدهای اجرایی درون تابع در نظر بگیر) استفاده میشود. در واقع عبارات لامبدا نسخه کوتاه شده توابع معمولی اما با قدرت مانور بیشتر هستند. به شبه کد تابع زیر دقت کن :
int func (int x)حالا اگر بخواهیم همین تابع رو بصورت عبارت لامبدا تعریف کنیم بصورت زیر میشود : در سمت چپ پارامترهای ورودی | بعد عملگر لامبدا | بعد هم بدنه تابع
{
return x+2
}
(int x) => x+2موقعی که عبارات لامبدا رو می خونیم عملگر لامبدا یعنی => را بصورت "می رود به" تلفظ می کنیم .
مزیت عبارات لامبدا در اینه که توسط کامپایلر بعنوان Delegete در نظر گرفته می شوند - می توانند یک تابع را بعنوان خروجی برگشت دهند و توانایی تعریف توابع Inline رو به برنامه نویس می دهند. در کتاب های مربوط به LINQ در این مورد اطلاعات بیشتری موجوده
این مقاله هم مفیده : [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
سلام
گرچه توضیحات دوستمان قدیمی مان anvar.net کاملاً صحیح بوده ولی بظاهر دوستان دیگر مثال برایشان کافی نبوده و کمی به توضیحات و مثال بیشتر نیاز دارند ...
به بیان خودمانی تر لامبدا همان تابع و متد است، فقط یکجورهایی خلاصه نویسی شده.
کد فوق با کد زیر برابر استکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
میتوانید امتحان کنید!کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
درواقع نه تنها برابر است، بلکه کامپایلر کداول را به کددوم تبدیل و سپس کامپایل میکند!
همانطورکه درپست قبلی هم اشاره شد، یک عبارت لامبدا یک متد یا تابع بظاهر بی نام است که از اشاره گر delegate آن در برنامه استفاده میکنیم و کد مان را کوچک و خلاصه تر و قابل فهم تر میکند.
موفق باشید.
عذر خواهی میکنم این o یعنی چی؟ از لحاظ دستوری وقتی () خالی گذاشتیم.یعنی تابع رو بدنه اش داریم جلو تر معرفی میکنیم درسته؟ اما o میزاریم چی؟
باکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام
خیر!از لحاظ دستوری وقتی () خالی گذاشتیم.یعنی تابع رو بدنه اش داریم جلو تر معرفی میکنیم درسته؟
کلاً قبل از این نماد خاص لامبدا، پارامترهای ورودی تابع را مشخص میکنیم و بعد این نماد خاص، بدنه تابع را مینویسیم.
در واقع به ترتیب تایپ میشود: پارامتر ورودی-نماد لامبدا-بدنه تابع لامبدا
بنابر توضیح فوق، یک جفت ( ) خالی یعنی تابع ما هیچ پارامتر ورودی دریافت نمیکند.
بنابر همان توضیح قبل، وقتی نامی قبل از نماد لامبدا بیاید به معنی پارامتر ورودی برای تابع ما خواهد بود.اما o میزاریم چی؟
o نام پارامتر ورودی است و نوع آن خودکار از delegate مورد نیاز در آن محل مشخص میشود.
دقیقاً مانند x که دوستمان anvar.net در مثالشان گذاشته بودند.
برای روشن شدن بهتر سینتکس ، سه مثال در زیر را مشاهده کنید.
عبارت لامبدا بدون پارامتر
عبارت لامبدا با یک پارامتر ورودیکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دقت کنید که پرانتز پارامترهای ورودی لامبدا، فقط در حالت تک پارامتره، اختیاری است و در کلیه حالات دیگر، اجباری است.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شبیه if ای که اگر بدنه تک دستوره داشته باشد، میتوانید { } را تایپ نکنید! ولی تایپش هم مشکل ندارد!
عبارت لامبدا با دو پارامتر ورودی
همانطورکه قبلاً هم بیان شد عبارات دامبدا شما توسط کامپایلر بطور خودکار به کدی شبیه NormalFunc تبدیل و سپس کامپایل نهایی میشود.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دقت کنید که چطور در عبارات دامبدا فوق ما فقط نام پارامتر x و y را آورده ایم و نوع آن را ذکر نکردیم.
در واقع کامپایلر نوع پارامترها را (در اینجا int) خودکار از روی delegate مورد نیاز (در اینجا SampleDelegate) در محل (در اینجا ورودی تابع Loop) متوجه میشود
موفق باشید.
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)