lambda expression چیست

متدهای بي نام در پاره اي مواقع بسيار مفيدند. اما نحو (syntax) به كارگيري آنها دشوار مي باشد. عبارات لامبدا ويژگي توابع بي نام را دارند اما با نحو ساده تري .

مفهوم lambda expression در C# 3.0 معرفی شد و مختصرنویسی  و یا  ساده شده  anonymous method می باشد. در واقع  در زمان کامپایل برنامه ، عبارات lambda به متدهای بی نام (anonymous method) تبدیل خواهند شد.
در این تبدیل بخش سمت چپ عبارات lambda (قبل از علامت “<=”) ورودی های متد بی نام بوده وبخش راست بدنه متد.

ساختار عبارات lambda

تعريف عبارات لامبدا از نحو (syntax) خاصي پيرو مي كند. همانطور كه مشاهده مي كنيد، پارامترهاي تابع هم به صورت صريح و هم به صورت ضمني قابل بيان اند. كلمه return به صورت ضمني حذف شده است

(Input-parameters) => expression-or-statement-block

 به عنوان مثال در برنامه زیر از یک متد بی نام که به یک Delegate ارجاع داده شده است استفاده شده است.

public delegate void MessageDelegate(string message);

public class Program

{

public static void Main()

{

MessageDelegate ShowMessage = new MessageDelegate(

delegate(string message){

Console.WriteLine(message);

}

);

ShowMessage(“Hello rtwo.ir!”);

}

}

به وسیله عبارات لامبدا می توان کد بالا را به صورت ساده تری نوشت :

using System;

public delegate voidMessageDelegate(string message);

public class Program

{

public static void Main() {

MessageDelegate ShowMessage = (message) => Console.WriteLine(message);

ShowMessage(“Hello rtwo.ir!”);

}

}

مقایسه متد بی نام و عبارت لامبدا :

MyDel del = delegate(int x) { return x + 1; } ; // متد بی نام

MyDel le1 = ( x) => { return x + 1; } ; //عبارت لامبدا

انواع عبارات lambda :

الف – Statement Lambda : در بخش راست خود دارای دستوراتی می باشد

x => { return x * x; };

ب- Expression Lambda : در بخش راست تنها عبارت وجود دارد

x => x * x;

چند نکته :

شما می توانید نوع پارامترهای عبارت لامبدا را نشان دهید.

MessageDelegate ShowMessage = (string message) => Console.WriteLine(message);

اگر عبارت شما دارای بیش از یک ورودی بود می توانید به شکل زیر عمل کنید

del d1 = (x , y) => x * y ;

اگر نوع یک پارامتر را مشخص کنید، باید نوع سایر پارامترها را نیز مشخص کنید. به عنوان مثال نمی توانید به صورت زیر عمل کنید :

del d2 = (int y) => x * y ;

در ادامه بحث linq به معرفی  Extension method خواهم پرداخت

درباره‌ رضا رحیمی

رضا رحیمی
در زندگی‌ام هیچ‌چیز را هیجان‌انگیزتر از آموختن نمی‌دانم . به xp , اسکرام ، تست ، برنامه نویسی ، تدریس ، تجارت های آنلاین و هر آنچه که به اینترنت مربوط می باشد علاقمندم. این سایت محل یادداشت های شخصی بنده می باشد

جوابی بنویسید

ایمیل شما نشر نخواهد شدخانه های ضروری نشانه گذاری شده است. *

*