Nasıl yapılır: Lambda İfadesi Oluşturma (Visual Basic)
Lambda ifadesi, adı olmayan bir işlev veya alt yordamdır. Lambda ifadesi, temsilci türünün geçerli olduğu her yerde kullanılabilir.
Tek satırlı lambda ifade işlevi oluşturmak için
Temsilci türünün kullanılabilmesi için aşağıdaki örnekte olduğu gibi anahtar sözcüğünü
Function
yazın:Dim add1 =
Function
Parantez içinde, hemen sonra
Function
işlevin parametrelerini yazın. adından sonraFunction
bir ad belirtmediğinize dikkat edin.Dim add1 = Function
(num As Integer)
Parametre listesini takip edin, işlevin gövdesi olarak tek bir ifade yazın. İfadenin değerlendirdiği değer, işlevi tarafından döndürülen değerdir. Dönüş türünü belirtmek için yan
As
tümcesi kullanmazsınız.Dim add1 = Function(num As Integer) num + 1
Bir tamsayı bağımsız değişkeni geçirerek lambda ifadesini çağırırsınız.
' The following line prints 6. Console.WriteLine(add1(5))
Alternatif olarak, aynı sonuç aşağıdaki örnek tarafından gerçekleştirilir:
Console.WriteLine((Function(num As Integer) num + 1)(5))
Tek satırlı lambda ifadesi alt yordam oluşturmak için
Temsilci türünün kullanabildiği herhangi bir durumda, aşağıdaki örnekte gösterildiği gibi anahtar sözcüğünü
Sub
yazın.Dim add1 =
Sub
Parantez içinde, hemen sonra
Sub
, alt yordam parametrelerini yazın. adından sonraSub
bir ad belirtmediğinize dikkat edin.Dim add1 = Sub
(msg As String)
Parametre listesini takip edin, alt yordam gövdesi olarak tek bir deyim yazın.
Dim writeMessage = Sub(msg As String) Console.WriteLine(msg)
Bir dize bağımsız değişkeni geçirerek lambda ifadesini çağırırsınız.
' The following line prints "Hello". writeMessage("Hello")
Çok satırlı lambda ifade işlevi oluşturmak için
Temsilci türünün kullanabildiği herhangi bir durumda, aşağıdaki örnekte gösterildiği gibi anahtar sözcüğünü
Function
yazın.Dim add1 =
Function
Parantez içinde, hemen sonra
Function
işlevin parametrelerini yazın. adından sonraFunction
bir ad belirtmediğinize dikkat edin.Dim add1 = Function
(index As Integer)
ENTER tuşuna basın. deyimi
End Function
otomatik olarak eklenir.işlevinin gövdesinde bir ifade oluşturmak ve değeri döndürmek için aşağıdaki kodu ekleyin. Dönüş türünü belirtmek için yan
As
tümcesi kullanmazsınız.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
Bir tamsayı bağımsız değişkeni geçirerek lambda ifadesini çağırırsınız.
Dim sortColumn = getSortColumn(0)
Çok satırlı lambda ifadesi alt satırı oluşturmak için
Temsilci türünün kullanabildiği herhangi bir durumda, aşağıdaki örnekte gösterildiği gibi anahtar sözcüğünü
Sub
yazın:Dim add1 =
Sub
Parantez içinde, hemen sonra
Sub
, alt yordam parametrelerini yazın. adından sonraSub
bir ad belirtmediğinize dikkat edin.Dim add1 = Sub
(msg As String)
ENTER tuşuna basın. deyimi
End Sub
otomatik olarak eklenir.işlevi gövdesinde, alt yordam çağrıldığında yürütülecek aşağıdaki kodu ekleyin.
Dim writeToLog = Sub(msg As String) Dim log As New EventLog() log.Source = "Application" log.WriteEntry(msg) log.Close() End Sub
Bir dize bağımsız değişkeni geçirerek lambda ifadesini çağırırsınız.
writeToLog("Application started.")
Örnek
Lambda ifadelerinin yaygın bir kullanımı, türü olan bir parametrenin bağımsız değişkeni olarak geçirilebilen bir işlev tanımlamaktır Delegate
. Aşağıdaki örnekte yöntemi, GetProcesses yerel bilgisayarda çalışan işlemlerin bir dizisini döndürür. Where sınıfından yöntemi, Enumerable bağımsız değişkeni olarak bir Boolean
temsilci gerektirir. Örnekteki lambda ifadesi bu amaç için kullanılır. Yalnızca bir iş parçacığı olan ve içinde filteredList
seçilen her işlem için döndürürTrue
.
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
Önceki örnek, DilLe Tümleşik Sorgu (LINQ) söz diziminde yazılan aşağıdaki koda eşdeğerdir:
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