Lambda Expression
Lambda Expression
بخشی از آموزش جامع C# و .NET 10
محتوای درس Lambda Expression
Lambda روشی فشرده برای تعریف Functionهای ناشناس است و در LINQ، Delegateها، Eventها و APIهای callbackمحور کاربرد فراوان دارد.
۱. Expression Lambda
برای منطق تکعبارتی میتوان از شکل expression-bodied استفاده کرد.
مثال
Func<int,int> square=x=>x*x;
Console.WriteLine(square(5));در این مثال، مفهوم «Expression Lambda» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۲. Statement Lambda
وقتی چند دستور لازم است بدنه Lambda با {} نوشته میشود.
مثال
Func<int,int,int> max=(a,b)=>{if(a>b)return a;return b;};در این مثال، مفهوم «Statement Lambda» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۳. پارامترها
Type پارامترها غالباً توسط Context استنتاج میشود، اما در سناریوهای خاص میتوان آن را صریح نوشت.
مثال
Func<int,int,int> add=(a,b)=>a+b;در این مثال، مفهوم «پارامترها» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۴. Closure
Lambda میتواند متغیرهای Scope بیرونی را Capture کند. این قابلیت قدرتمند است اما روی Lifetime و رفتار حلقهها اثر دارد.
مثال
int factor=10; Func<int,int> mul=x=>x*factor; factor=20; Console.WriteLine(mul(2));در این مثال، مفهوم «Closure» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۵. Lambda در LINQ
Operatorهای LINQ معمولاً Func یا Expression دریافت میکنند و Lambda روش طبیعی بیان شرط و Projection است.
مثال
var names=new[]{"Ali","Sara"}.Where(x=>x.Length>3);در این مثال، مفهوم «Lambda در LINQ» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نامها عمداً ساده انتخاب شدهاند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب میشود.
۶. مثالهای عملی
Func<int, int> square = x => x * x;
Console.WriteLine(square(5));این نمونه عملی چند مفهوم فصل را در کنار هم قرار میدهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.
Action<string> log = message =>
{
string timestamp = DateTime.Now.ToString("HH:mm:ss");
Console.WriteLine($"[{timestamp}] {message}");
};این نمونه عملی چند مفهوم فصل را در کنار هم قرار میدهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.
۷. خطاهای رایج
• Lambdaهای طولانی که باید متد نامدار باشند
• Capture ناخواسته State قابل تغییر
• ابهام در Lambdaهای تو در تو
۸. نکات اجرایی
• نامها، Typeها و Methodها را متناسب با مفهوم دامنه و بدون ابهام انتخاب کنید.
• هشدارهای کامپایلر و Nullable را بدون بررسی خاموش نکنید.
• منطق هر بخش را تا حد امکان کوچک، قابل تست و مستقل از I/O غیرضروری نگه دارید.
۹. تمرین عملی
با List و Lambda مجموعهای از نامها را بر اساس طول فیلتر، مرتب و به حروف بزرگ تبدیل کنید.
۱۰. جمعبندی
در این فصل، مبانی «Lambda Expression» با تمرکز بر ساختارهای اصلی زبان، الگوهای صحیح استفاده و خطاهای رایج بررسی شد. تسلط بر این مفاهیم زمینه لازم برای اتصال موضوع به فصلهای بعدی و طراحی کدهای خواناتر، قابل نگهداری و قابل تست را فراهم میکند.