تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الدرس الثامن والثلاثون - Lambda Expressions
#1
كاتب الموضوع : أحمد جمال

بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .


كنا قد تحدثنا في موضوع سابق عن Anonymous Methods التي تمكننا من كتابة كود الدالة في مكان استدعاءها ما دمنا لن نستدعيها سوى مرة واحدة فقط ، لنفترض مصفوفة نقوم فيها بالبحث عن الأعداد التي تقبل القسمة على 2 :
C#:

كود :
static void TraditionalDelegateSyntax()
{
List<int> list = new List<int>();
list.AddRange(new int[] { 20, 1, 4, 8, 9, 44 });
Predicate<int> callback = new Predicate<int>(IsEvenNumber);
List<int> evenNumbers = list.FindAll(callback);
Console.WriteLine("Here are your even numbers:");
foreach (int evenNumber in evenNumbers)
{
Console.Write("{0}\t", evenNumber);
}

}

static bool IsEvenNumber(int i)
{
return (i % 2) == 0;
}
مع استخدامنا لل Anonymous Methods من C# 2008 اصبح باستطاعتنا كتابتها بالشكل التالي كما تعرف :

C#:

كود :
List<int> list = new List<int>();
list.AddRange(new int[] { 20, 1, 4, 8, 9, 44 });

List<int> evenNumbers = list.FindAll(delegate(int i)
{ return (i % 2) == 0; } );
Console.WriteLine("Here are your even numbers:");
foreach (int evenNumber in evenNumbers)
{
Console.Write("{0}\t", evenNumber);
}
الجديد في .net 2008 هو استخدام ما يعرف باسم Lambda Expressions ، والتي يمكن كتابتها بالشكل التالي :

كود :
X => f(X)
لذا ستكون الدالة الخاصة بنا والتي تعيد True في حالة i%2==0 بالشكل التالي :

كود :
(int i) => (i % 2) == 0;
حيث ان ال i هي البارميتر ، ونوعه int ، يمكنك حتى الاستغناء عن تعريف نوع البارميتر لإن Lambda سوف تتعرف عليه تلقائياً ، لذا سيكون الكود الكامل بالشكل التالي :
C#:


كود :
List<int> list = new List<int>();
list.AddRange(new int[] { 20, 1, 4, 8, 9, 44 });
List<int> evenNumbers = list.FindAll(i => (i % 2) == 0);
Console.WriteLine("Here are your even numbers:");
foreach (int evenNumber in evenNumbers)
{
Console.Write("{0}\t", evenNumber);
}
*** لم استطع تحويل الأكواد إلى vb.net ، لذا اكتفي بأن احيلك لهذا الدرس للأستاذ محمد سامر سلو :
http://vb4arb.com/vb/showthread.php?703
}}}}
تم الشكر بواسطة:
#2
return value :

يمكننا ليس فقط اعادة قيمة واحدة أو true , false فقط ، يمكنك الاطلاع على المثال التالي :


كود :
[FONT=Tahoma]List<int> evenNumbers = list.FindAll((i) =>[/FONT]
[FONT=Tahoma]{[/FONT]
[FONT=Tahoma]Console.WriteLine("value of i is currently: {0}", i);[/FONT]
[FONT=Tahoma]bool isEven = ((i % 2) == 0);[/FONT]
[FONT=Tahoma]return isEven;[/FONT]
[FONT=Tahoma]});[/FONT]


ايضاً يمكننا تمرير اكثر من بارميتر ، وذلك حسب الدالة ...
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الدرس الأول : تحميل .net 2008 ومميزات استخدامه oneyemenweb2 1 669 07-03-13, 02:04 AM
آخر رد: abdoojh
  اعلان - انتهاء الدورة - الدرس التاسع والسبعون -) RaggiTech 0 598 14-10-12, 11:23 PM
آخر رد: RaggiTech
  الدرس الثامن والسبعون - Ajax RaggiTech 2 869 14-10-12, 11:22 PM
آخر رد: RaggiTech
  الدرس السابع والسبعون - ASP.net وقواعد البيانات RaggiTech 2 907 14-10-12, 11:19 PM
آخر رد: RaggiTech
  الدرس السادس والسبعون - ASP.net - الجزء الثالث RaggiTech 7 1,145 14-10-12, 11:14 PM
آخر رد: RaggiTech
  الدرس الخامس والسبعون - ASP.net - الجزء الثاني RaggiTech 5 1,310 14-10-12, 11:07 PM
آخر رد: RaggiTech
  الدرس الرابع والسبعون - ASP.net RaggiTech 6 1,085 14-10-12, 10:58 PM
آخر رد: RaggiTech
  الدرس الثالث والسبعون - مقدمة إلى تطوير المواقع RaggiTech 4 843 14-10-12, 10:44 PM
آخر رد: RaggiTech
  الدرس الثاني والسبعون - مقدمة إلى Mono RaggiTech 0 594 14-10-12, 10:37 PM
آخر رد: RaggiTech
  الدرس الواحد والسبعون - XML Commenting RaggiTech 2 793 14-10-12, 10:35 PM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم