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
Dalam situasi apa pun di mana jenis delegasi dapat digunakan, ketik kata kunci
Function
, seperti dalam contoh berikut:Dim add1 =
Function
Dalam tanda kurung, langsung setelah
Function
, ketik parameter fungsi. Perhatikan bahwa Anda tidak menentukan nama setelahFunction
.Dim add1 = Function
(num As Integer)
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))
Atau, hasil yang sama dicapai dengan contoh berikut:
Console.WriteLine((Function(num As Integer) num + 1)(5))
Untuk membuat subrutin ekspresi lambda satu baris
Dalam situasi apa pun di mana jenis delegasi dapat digunakan, ketik kata kunci
Sub
, seperti dalam contoh berikut.Dim add1 =
Sub
Dalam tanda kurung, langsung setelah
Sub
, ketik parameter subrutin. Perhatikan bahwa Anda tidak menentukan nama setelahSub
.Dim add1 = Sub
(msg As String)
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
Dalam situasi apa pun di mana jenis delegasi dapat digunakan, ketik kata kunci
Function
, seperti dalam contoh berikut.Dim add1 =
Function
Dalam tanda kurung, langsung setelah
Function
, ketik parameter fungsi. Perhatikan bahwa Anda tidak menentukan nama setelahFunction
.Dim add1 = Function
(index As Integer)
Tekan ENTER. Pernyataan
End Function
ditambahkan secara otomatis.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
Dalam situasi apa pun di mana jenis delegasi dapat digunakan, ketik kata kunci
Sub
, seperti dalam contoh berikut:Dim add1 =
Sub
Dalam tanda kurung, langsung setelah
Sub
, ketik parameter subrutin. Perhatikan bahwa Anda tidak menentukan nama setelahSub
.Dim add1 = Sub
(msg As String)
Tekan ENTER. Pernyataan
End Sub
ditambahkan secara otomatis.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