كيفية القيام بما يلي: إنشاء تعبير لامدا
تعبير lambda هي الدالة أو الروتين الفرعي الذي لا يحتوي على اسم. يمكن استخدام تعبير lambda أينما صح نوع تفويض.
لإنشاء دالة تعبير lambda مفرد الأسطر
في أي موقف حيث تفويض قد يكون نوع الاستخدام، اكتب الكلمة الأساسية Function، كما هو موضح في المثال التالي:
Dim add1 = Function
أقواس مباشرة بعد Function، نوع معلمات الدالة. لاحظ لم تحدد اسماً بعد Function.
Dim add1 = Function (num As Integer)
قائمة المعلمات التالية نوع تعبير مفرد كنص دالة. القيمة التي التعبير يقوم بتقييمها للقيمة التي يتم إرجاعها بواسطة دالة. لا تستخدم جملة As لتعيين نوع الإرجاع.
Dim add1 = Function(num As Integer) num + 1
تقوم باستدعاء التعبير لامدا بواسطة التمرير في وسيطة عدد صحيح.
' The following line prints 6. Console.WriteLine(add1(5))
بدلاً من ذلك، ويتم تحقيق نفس النتيجة عن طريق المثال التالي:
Console.WriteLine((Function(num As Integer) num + 1)(5))
لإنشاء واحد- خط روتين فرعي التعبير lambda
في أي موقف حيث تفويض قد يكون نوع الاستخدام، اكتب الكلمة الأساسية Sub، كما هو موضح في المثال التالي:
Dim add1 = Sub
أقواس مباشرة بعد Sub، نوع معلمات الدالة. لاحظ لم تحدد اسماً بعد Sub.
Dim add1 = Sub (msg As String)
قائمة المعلمات التالية اكتب جملة واحدة كنص الروتين الفرعي.
Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)
يمكنك استدعاء تعبير lambda بواسطة التمرير في وسيطة سلسلة.
' The following line prints "Hello". writeMessage("Hello")
لإنشاء دالة تعبير lambda متعدد الأسطر
في أي موقف حيث تفويض قد يكون نوع الاستخدام، اكتب الكلمة الأساسية Function، كما هو موضح في المثال التالي:
Dim add1 = Function
أقواس مباشرة بعد Function، نوع معلمات الدالة. لاحظ لم تحدد اسماً بعد Function.
Dim add1 = Function (index As Integer)
اضغط ENTER. الجملة End Function يضاف تلقائياً.
داخل نص الدالة قم بإضافة ما يلي التعليمات البرمجية لإنشاء أحد التعبيرات وإرجاع القيمة. لا تستخدم جملة As لتعيين نوع الإرجاع.
Dim getSortColumn = Function(index As Integer) Select Case index Case 0 Return "FirstName" Case 1 Return "LastName" Case 2 Return "CompanyName" Case Else Return "LastName" End Select End Function
تقوم باستدعاء التعبير لامدا بواسطة التمرير في وسيطة عدد صحيح.
Dim sortColumn = getSortColumn(0)
لإنشاء روتين فرعي تعبير lambda متعدد الأسطر
في أي موقف حيث تفويض قد يكون نوع الاستخدام، اكتب الكلمة الأساسية Sub، كما هو موضح في المثال التالي:
Dim add1 = Sub
أقواس مباشرة بعد Sub، نوع معلمات الدالة. لاحظ لم تحدد اسماً بعد Sub.
Dim add1 = Sub(msg As String)
اضغط ENTER. الجملة End Sub يضاف تلقائياً.
داخل نص الدالة قم بإضافة ما يلي في التعليمات البرمجية لتنفيذه عند استدعاء الروتين الفرعي.
Dim writeToLog = Sub(msg As String) Dim log As New EventLog() log.Source = "Application" log.WriteEntry(msg) log.Close() End Sub
يمكنك استدعاء تعبير lambda بواسطة التمرير في وسيطة سلسلة.
writeToLog("Application started.")
مثال
استخدام شائع لتعبيرات لامدا هي تعريف الدالة التي يمكن تمريرها في أنها وسيطة للمعلمة يكون نوعهDelegate. في المثال التالي GetProcesses الأسلوب بإرجاع صفيف من العمليات قيد التشغيل على كمبيوتر محلي. الأسلوب Where من فئة Enumerable يتطلب تفويض Boolean كالوسيطة الخاصة به. يتم استخدام التعبير لامدا في المثال لهذا الغرض. تقوم بإرجاع True الذي يملك مؤشر واحد فقط لكل عملية و تلك المحددة في filteredList.
Sub Main()
' Create an array of running processes.
Dim procList As Process() = Diagnostics.Process.GetProcesses
' Return the processes that have one thread. Notice that the type
' of the parameter does not have to be explicitly stated.
Dim filteredList = procList.Where(Function(p) p.Threads.Count = 1)
' Display the name of each selected process.
For Each proc In filteredList
MsgBox(proc.ProcessName)
Next
End Sub
يكافئ المثال السابق للتعليمة البرمجية التالية التي يتم كتابتها في بناء الجملة مجموعة ميزات Language-Integrated Query (LINQ):
Sub Main()
Dim filteredQuery = From proc In Diagnostics.Process.GetProcesses
Where proc.Threads.Count = 1
Select proc
For Each proc In filteredQuery
MsgBox(proc.ProcessName)
Next
End Sub
راجع أيضًا:
المهام
كيفية القيام بما يلي: تمرير إجراءات إلى إجراء آخر في Visual Basic
المرجع
المبادئ
مقدمة حول LINQ في Visual Basic