تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
من الميزات القادمة مع vb2010 فيما يتعلق بتعابير لمدا
#1
كاتب الموضوع : samerselo

هذه مأخوذة من مقالة تتحدث عن النسخة ما قبل النسخة التجريبية

تعابير لمدا متعددة الأسطر

تعابير لمدا المتعددة الأسطر هي تعابير لمدا تمثل إجرائية تحتوي على تعبير أو أكثر كما في المثال

كود :
Dim nums() As Integer = {1, 2, 3, 4, 5}

nums = Array.FindAll(nums, Function(n)
Console.WriteLine("testing " & n)
Return n > 2

End Function)
وتماما كتعابير لمدا الاعتيادية فالمترجم سيستدل على نوع كل محدد عندما يكون ذلك ممكنا كما سيستدل أيضا على النوع المعاد من تعبير لمدا باستخدام ألغوريتم النوع المسيطر للاختيار بين الأنواع المعادة من كل تعبير Return انظر المثال

كود :
'numDelegate is an anonymous delegate compatible with Func(Of Integer,
Double)
Dim numDelegate = Function(n As Integer)
If n Mod 2 = 0 Then
Return 3
Else
Return 3.14
End If
End Function
ففي هذه الحالة يرى المترجم أن النوع المعاد قد يكون Integer أو Double وبهذا فإنه يختار Double بما أن مجاله أعرض من Integer كما يمكنك تحديد النوع المعاد من التعبير باستخدام قسم As ففي هذه الحالة سيستخدم المترجم النوع الذي قمت بتحديده ولن يقوم بمحاولة الاستدلال على النوع المعاد من التعبير


كود :
Dim lambda = Function(n As Integer) As Single
If n Mod 2 = 0 Then
Return 3
Else
Return 3.14
End If
End Function
تعابير لمدا كإجراءات

تماما كما نستخدم الكلمة المحجوزة Function لإنشاء تعبير لمدا متعدد الأسطر تعيد قيمة يمكن استخدام الكلمة المحجوزة Sub لإنشاء تعبير لمدا لا يعيد قيمة

كود :
Array.ForEach(nums, Sub(n)
Console.Write("Number: ")
Console.WriteLine(n)
End Sub)
تعابير لمدا الإجرائية وحيدة السطر
يدعم visual Basic 9.0 تعابير لمدا وحيدة السطر التي تعيد قيمة فالكود التالي سيعيد خطأ على النسخة 9.0

كود :
'Error - Console.WriteLine doesn't return a value
Array.ForEach(nums, Function(n) Console.WriteLine(n))
والآن مع Visual Basic 10.0 أصبح يمكن كتابة تعابير لمدا لا تعيد قيمة كما في المثال

كود :
'Valid
Array.ForEach(nums, Sub(n) Console.WriteLine(n)) 'Valid
}}}
تم الشكر بواسطة:



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


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