سرفصلهای پست
عبارت های لامبدا (Lambda)
برای درک کارایی عبارت های لامبدا ، متد گسترشی FilterByPrice که در جلسه گذشته کدنویسی کردیم را در نظر بگیرید اگر بخواهیم این متد ، ورودی ها را بر پایه نام آنها هم فیلتر کند باید متد دیگری به نام FilterByName به کلاس MyExtentionMethods.cs اضافه نمایید.این متد در کد زیر به صورت پررنگ نمایش داده شده است.
کد زیر کاربرد هر دور متد را در کنترلر نشان میدهد .
فیلتر نخست کالاهایی را جدا میکند که قیمت آنها بیش از ۱۰ دلار باشد در حالی که فیلتر دوم کالاهایی که نام آنها با حرف S شروع شوند را فیلتر میکند اجرای برنامه خروجی زیر را نشان خواهد داد.
تعریف تابع با عبارت لامبدا
شما می توانید برای فیلتر کردن داده ها بر پایه ی هر خاصیت کلاس و یا هر ترکیبی از خاصیت های آن ، هربار متد جدیدی به کلاس MyExtensionMethods اضافه کنید . #C روش بهتری با امکان ارسال توابع به متد ، به عنوان پارامتر متد پیشنهاد میکند . کد زیر متدی گسترشی را نشان میدهد که کلکسیونی از نمونه های Product را فیلتر میکند ولی انتخاب اینکه چه نتیجه ای در خروجی به دست آید را به تابعی دیگر میسپارد.
پارامتر دوم متد ، تابعی است که شیئی از Product را پذیرفته و نتیجه ای منطقی را باز میگرداند این تابع برای هر یک از نمونه های Product فراخوانی میشود و چنانچه مقدار بازگشتی تابع true باشد ، نمونه ی یاد شده در خروجی بازگشت داده میشود . برای استفاده از این فیلتر ، میتوان متدی را مشخص کرد و یا تابع جدیدی ایجاد کرد.
هیچ کدام از این روش ها از نظر برنامهنویسی بهینه و کارامد نیستند ایجاد تابعی به شکل <Func <Product,bool روان و خوش فرم نیست همانگونه که کد زیر نشان میدهد عبارت های لامبدا امکان تعریف توابع مورد نیاز را به صورت موثرتر وخواناتری فراهم میآورند .
در کد بالا پارامترها بدون مشخص شدن نوع آورده شده اند نماد <= را می توانید به شکل “نتیجه می دهد” بخوانید این نماد پارامترها را به نتیجه ی برگشتی پیوند می دهد در مثال ما ، پارامتری از نوع Product به نام P ، باید نتیجه ی منطقی به دست دهد این مقدار در عبارت نخست، چنانچه قیمت بیشتر از ۲۰ باشد true و در عبارت دوم زمانی true است که خاصیت Name با حرف S شروع شوند (P به این دلیل شیئی از Product است که عبارت لامبدا بر روی آرایه ی productArray که دارای عناصر Product است اجرا میشود .)
لزومی ندارد که منطق عملیات مورد نظر در عبارت لامبدا آورده شود روش دیگر این است که متدی جداگانه بنویسید ودر عبارت لامبدا فراخوانی کنید به صورت زیر :
اگر تعداد پارامترهای ورودی بیش از یکی باشد باید از نماد پرانتز استفاده کرد همانند کد زیر :
و در پایان اگر بخواهیم منطق کد را در عبارت لامبدا بیاوریم و تعداد خط های کد بیش از یکی باشد از نمادهای {} برای ایجاد بلاکی از کد استفاده میشود .
عبارت های لامبدا برای متدها و خصوصیت ها
در نگارش 6.0 #C کارایی عبارت های لامبدا گسترش یافته است به طوری که آنها را میتوانید برای ایجاد متد و یا خصوصیات نیز به کار برید. در MVC به ویژه در کنترلرها ، با متدهایی برخورد میکنید که باید با یک خط کد ، داده هایی را برای نمایش به نما بفرستید در کد زیر اکشن Index با پیروی از این تفکر نوشته شده است.
متد اکشن کلکسیونی از نمونه های Product را از متد ()Product.GetProducts گرفته واز LINQ برای ارسال مقدار Name آنها برای نما استفاده میکند اجرای برنامه خروجی زیر را نشان میدهد.
از آنجایی که متد () GetProducts در برگشتی های خود ، عنصری تهی را هم نتیجه میدهد ، یک عنصر خالی هم در پنجره مرورگر خواهید داشت.
اگر بدنهی متدی بیشتر از یک عبارت نداشته باشد میتوان برای آن ، از عبارت لامبدا به صورت زیر استفاده کرد.
زمانی که عبارت لامبدا برای ایجاد متد به کار میرود ، فرمان return حذف میشود و برای ارتباط دادن الگوی متد به پیاده سازی آن از نماد <= استفاده میشود.
همین روش را میتوانید برای ایجاد خاصیت ها به کار برید. کد زیر نمونه ای از این کار را در کلاس Product نشان میدهد.
به پایان این جلسه آموزشی بسیار مهم رسیدیم در صورتی که سوالی پیرامون مقالات آموزشی داشتید حتما در قسمت نظرات مطرح کنید.
/
5
(
2
امتیاز
)