مشاهده نسخه کامل
: <=
سلام
از عزیزان امکان داره کسی توضیحی به ما بدهند؟ نحوه و چرایی استفاده؟
(در مورد این عملگر)
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
anvar.net
10-08-2013, 11:00
سمبل => به عملگر لامبدا معروفه و صریحا به کامپایلر اعلان می کند که عبارت مورد نظر از نوع لامبدا هست : از این عملگر در عبارات لامبدا برای جدا کردن متغیرهای ورودی که در سمت چپ قرار دارند (همان پارامترهای ورودی به یک تابع در نظر بگیر) از بدنه لامبدا که در سمت راست قرار دارد (همان کدهای اجرایی درون تابع در نظر بگیر) استفاده میشود. در واقع عبارات لامبدا نسخه کوتاه شده توابع معمولی اما با قدرت مانور بیشتر هستند. به شبه کد تابع زیر دقت کن :
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) متوجه میشود
موفق باشید.
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.