فصل 27 از 40 درس 1 از 1

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» با تمرکز بر ساختارهای اصلی زبان، الگوهای صحیح استفاده و خطاهای رایج بررسی شد. تسلط بر این مفاهیم زمینه لازم برای اتصال موضوع به فصل‌های بعدی و طراحی کدهای خواناتر، قابل نگهداری و قابل تست را فراهم می‌کند.