منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
Lambda Expressions من جديد VB2008 - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184)
+--- الموضوع : Lambda Expressions من جديد VB2008 (/showthread.php?tid=4714)



Lambda Expressions من جديد VB2008 - RaggiTech - 01-10-12

كاتب الموضوع : samerselo


الـ Lambda Expression هو وظيفة Function بدون اسم تحتسب وتعيد قيمة وحيدة كما يمكن استخدامها في التعابير التي تطلب إجراءات مفوضة Delegate والمثال التالي عن هذه التعابير يأخذ قيمة ويعيد الناتج بعد إضافة واحد لها

كود :
Function (num As Integer) num + 1
كما يمكنك إسناد هذه الوظيفة لمتغير وتمرير القيمة له

كود :
Dim add1 = Function(num As Integer) num + 1
Console.WriteLine(add1(5))
كما يمكنك تعريف وتنفيذ الوظيفة بنفس الوقت

كود :
Console.WriteLine((Function(num As Integer) num + 1)(5))
كما يمكن أن تستخدم Lambda Expressions كقيمة معادة عند استدعاء وظيفة أو تمريرها كوسيط لإجراء مفوض ففي المثال التالي تستخدم Lambda Expressions بوليانية كوسائط للإجراء testResult حيث تطبق الطريقة فحص بولياني لوسيط من النوع Integer ويظهر القيمة Success إذا كانت قيمة Lambda Expression هي True أو Failure إن كانت قيمته False

كود :
Module Module2

Sub Main()
' The following line will print Success, because 4 is even.
testResult(4, Function(num) num Mod 2 = 0)
' The following line will print Failure, because 5 is not > 10.
testResult(5, Function(num) num > 10)
End Sub

' Sub testResult takes two arguments, an integer value and a
' Boolean function.
' If the function returns True for the integer argument, Success
' is displayed.
' If the function returns False for the integer argument, Failure
' is displayed.
Sub testResult(ByVal value As Integer, ByVal fun As Func(Of Integer, Boolean))
If fun(value) Then
Console.WriteLine("Success")
Else
Console.WriteLine("Failure")
End If
End Sub

End Module
وتكون صيغتها على الشكل
• هذه التعابير لا تملك اسما
• لا يمكن استخدام المعدلات معها مثل Overloads أو Overrides
• لا تستخدم قسم AS لتحديد نوع القيمة المعادة وبدلا عن ذلك يكون نوع القيمة المعادة هو نوع القيمة التي يشكلها جسم الإجراء فإن كان جسم الإجراء مثلا Cust.City = "London" فتكون القيمة المعادة بوليانية
• جسم الإجراء يجب أن يكون تعبير وليس تصريح ويمكن أن يحتوي على استدعاء لوظيفة Function ولكنه لا يمكن أن يستدعي إجراء Sub
• لا يوجد تعبير Return وتكون القيمة المعادة هي قيمة ذلك التعبير الذي يشكل جسم الوظيفة
• لا يوجد تعبير End
• يجب أن تكون جميع الوسائط محددة النوع أو تكون جميعها بأنواع بالإشارة
• غير مسموح بالوسائط الاختيارية
• الوسائط Generic غير مسموح بها
ونتيجة لهذه القواعد سنرى أن أي تعبير Lambda Expression سيكون بسيطا وغير معقد