Bagikan melalui


Cara: Membuat Ekspresi Lambda (Visual Basic)

Ekspresi lambda adalah fungsi atau subrutin yang tidak memiliki nama. Ekspresi lambda dapat digunakan di mana pun jenis delegasi valid.

Untuk membuat fungsi ekspresi lambda satu baris

  1. Dalam situasi apa pun di mana jenis delegasi dapat digunakan, ketik kata kunci Function, seperti dalam contoh berikut:

    Dim add1 = Function

  2. Dalam tanda kurung, langsung setelah Function, ketik parameter fungsi. Perhatikan bahwa Anda tidak menentukan nama setelah Function.

    Dim add1 = Function (num As Integer)

  3. Mengikuti daftar parameter, ketik ekspresi tunggal sebagai isi fungsi. Nilai yang dievaluasi ekspresi adalah nilai yang dikembalikan oleh fungsi. Anda tidak menggunakan klausa As untuk menentukan jenis pengembalian.

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

    Anda memanggil ekspresi lambda dengan meneruskan argumen bilangan bulat.

    ' The following line prints 6.
    Console.WriteLine(add1(5))
    
  4. Atau, hasil yang sama dicapai dengan contoh berikut:

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

Untuk membuat subrutin ekspresi lambda satu baris

  1. Dalam situasi apa pun di mana jenis delegasi dapat digunakan, ketik kata kunci Sub, seperti dalam contoh berikut.

    Dim add1 = Sub

  2. Dalam tanda kurung, langsung setelah Sub, ketik parameter subrutin. Perhatikan bahwa Anda tidak menentukan nama setelah Sub.

    Dim add1 = Sub (msg As String)

  3. Mengikuti daftar parameter, ketik satu pernyataan sebagai isi subrutin.

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

    Anda memanggil ekspresi lambda dengan meneruskan argumen bilangan bulat.

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

Untuk membuat fungsi ekspresi lambda satu baris

  1. Dalam situasi apa pun di mana jenis delegasi dapat digunakan, ketik kata kunci Function, seperti dalam contoh berikut.

    Dim add1 = Function

  2. Dalam tanda kurung, langsung setelah Function, ketik parameter fungsi. Perhatikan bahwa Anda tidak menentukan nama setelah Function.

    Dim add1 = Function (index As Integer)

  3. Tekan ENTER. Pernyataan End Function ditambahkan secara otomatis.

  4. Dalam isi fungsi, tambahkan kode berikut untuk membuat ekspresi dan mengembalikan nilai. Anda tidak menggunakan klausa As untuk menentukan jenis pengembalian.

    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
    

    Anda memanggil ekspresi lambda dengan meneruskan argumen bilangan bulat.

    Dim sortColumn = getSortColumn(0)
    

Untuk membuat subrutin ekspresi lambda multibaris

  1. Dalam situasi apa pun di mana jenis delegasi dapat digunakan, ketik kata kunci Sub, seperti dalam contoh berikut:

    Dim add1 = Sub

  2. Dalam tanda kurung, langsung setelah Sub, ketik parameter subrutin. Perhatikan bahwa Anda tidak menentukan nama setelah Sub.

    Dim add1 = Sub (msg As String)

  3. Tekan ENTER. Pernyataan End Sub ditambahkan secara otomatis.

  4. Dalam isi fungsi, tambahkan kode berikut untuk dijalankan saat subrutin dipanggil.

    Dim writeToLog = Sub(msg As String)
                         Dim log As New EventLog()
                         log.Source = "Application"
                         log.WriteEntry(msg)
                         log.Close()
                     End Sub
    

    Anda memanggil ekspresi lambda dengan meneruskan argumen bilangan bulat.

    writeToLog("Application started.")
    

Contoh

Penggunaan umum ekspresi lambda adalah untuk menentukan fungsi yang dapat diteruskan sebagai argumen untuk parameter yang jenisnya adalah Delegate. Dalam contoh berikut, GetProcesses metode mengembalikan array proses yang berjalan di komputer lokal. Metode Where dari kelas Enumerable memerlukan Boolean untuk didelegasikan sebagai argumennya. Ekspresi lambda dalam contoh digunakan untuk tujuan tersebut. Ini mengembalikan True untuk setiap proses yang hanya memiliki satu utas, dan yang dipilih dalam 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

Contoh sebelumnya setara dengan kode berikut, yang ditulis dalam sintaks 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

Lihat juga