كيفية القيام بما يلي: إنشاء تعبير لامدا

تعبير lambda هي الدالة أو الروتين الفرعي الذي لا يحتوي على اسم. يمكن استخدام تعبير lambda أينما صح نوع تفويض.

لإنشاء دالة تعبير lambda مفرد الأسطر

  1. في أي موقف حيث تفويض قد يكون نوع الاستخدام، اكتب الكلمة الأساسية Function، كما هو موضح في المثال التالي:

    Dim add1 = Function

  2. أقواس مباشرة بعد Function، نوع معلمات الدالة. لاحظ لم تحدد اسماً بعد Function.

    Dim add1 = Function (num As Integer)

  3. قائمة المعلمات التالية نوع تعبير مفرد كنص دالة. القيمة التي التعبير يقوم بتقييمها للقيمة التي يتم إرجاعها بواسطة دالة. لا تستخدم جملة As لتعيين نوع الإرجاع.

    Dim add1 = Function(num As Integer) num + 1
    

    تقوم باستدعاء التعبير لامدا بواسطة التمرير في وسيطة عدد صحيح.

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. بدلاً من ذلك، ويتم تحقيق نفس النتيجة عن طريق المثال التالي:

    Console.WriteLine((Function(num As Integer) num + 1)(5))
    

لإنشاء واحد- خط روتين فرعي التعبير lambda

  1. في أي موقف حيث تفويض قد يكون نوع الاستخدام، اكتب الكلمة الأساسية Sub، كما هو موضح في المثال التالي:

    Dim add1 = Sub

  2. أقواس مباشرة بعد Sub، نوع معلمات الدالة. لاحظ لم تحدد اسماً بعد Sub.

    Dim add1 = Sub (msg As String)

  3. قائمة المعلمات التالية اكتب جملة واحدة كنص الروتين الفرعي.

    Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)
    

    يمكنك استدعاء تعبير lambda بواسطة التمرير في وسيطة سلسلة.

    ' The following line prints "Hello".
    writeMessage("Hello")
    

لإنشاء دالة تعبير lambda متعدد الأسطر

  1. في أي موقف حيث تفويض قد يكون نوع الاستخدام، اكتب الكلمة الأساسية Function، كما هو موضح في المثال التالي:

    Dim add1 = Function

  2. أقواس مباشرة بعد Function، نوع معلمات الدالة. لاحظ لم تحدد اسماً بعد Function.

    Dim add1 = Function (index As Integer)

  3. اضغط ENTER. الجملة End Function يضاف تلقائياً.

  4. داخل نص الدالة قم بإضافة ما يلي التعليمات البرمجية لإنشاء أحد التعبيرات وإرجاع القيمة. لا تستخدم جملة 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 متعدد الأسطر

  1. في أي موقف حيث تفويض قد يكون نوع الاستخدام، اكتب الكلمة الأساسية Sub، كما هو موضح في المثال التالي:

    Dim add1 = Sub

  2. أقواس مباشرة بعد Sub، نوع معلمات الدالة. لاحظ لم تحدد اسماً بعد Sub.

    Dim add1 = Sub(msg As String)

  3. اضغط ENTER. الجملة End Sub يضاف تلقائياً.

  4. داخل نص الدالة قم بإضافة ما يلي في التعليمات البرمجية لتنفيذه عند استدعاء الروتين الفرعي.

    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

المرجع

كشف دالة (Visual Basic)

عبارة Vsual Basic) Sub)

عبارة التفويض

Enumerable

المبادئ

تعبيرات لامدا

مقدمة حول LINQ في Visual Basic

موارد أخرى

المفوضين (Visual Basic)