Pada blog series kali ini saya ingin mengeksplorasi fitur-fitur baru dari VB10 (VB10 akan dirilis bersama dengan VS2010 dan .NET 4.0). Fitur yang akan kita bahas kali ini adalah Multiline Lambdas, sebenarnya fitur ini sudah disupport di C# 3.0, tapi VB baru menambahkan fitur ini pada VB10.
Pada VB10 anda dapat menggunakan Multiline Lambdas sebagai berikut:
1: Dim bil() As Integer = {1, 2, 3, 4, 5, 6, 7} 2: bil = Array.FindAll(bil, Function(n)
3: Console.WriteLine("Array ke-" & n) 4: If n Mod 2 = 0 Then
5: Return n
6: End If
7: End Function)
8: For Each num In bil
9: Console.WriteLine(num)
10: Next
outputnya :
Sama seperti Lambda Expression pada VB9 maka parameter dari Lambda tersebut akan diinfer secara otomatis oleh compiler (pada contoh diatas n akan diinfer menjadi tipe integer).
Dengan menggunakan Multiline Lambda anda dapat membuat anonymous delegate dengan mudah contohnya:
1: Dim cthDelegate = Function(n As Integer)
2: Dim count = 0
3: For i = 1 To n
4: If n Mod i = 0 Then
5: count += 1
6: End If
7: Next
8: If count = 2 Then
9: Return "Bilangan Prima"
10: Else
11: Return "Bukan Bilangan Prima"
12: End If
13: End Function
14:
15: Console.WriteLine(cthDelegate(17))
outputnya :
Jika anda cermati dari kode diatas maka nilai kembalian dari function tersebut adalah tipe “String” (compiler juga secara otomatis akan meng-infer tipenya). Anda juga dapat secara eksplisit menentukan tipe kembalian dari function diatas sehingga compiler tidak akan meng-infer tipenya secara otomatis.
1: Dim cthDelegate = Function(n As Integer) as String
2: Dim count = 0
3: For i = 1 To n
4: If n Mod i = 0 Then
5: count += 1
6: End If
7: Next
8: If count = 2 Then
9: Return "Bilangan Prima"
10: Else
11: Return "Bukan Bilangan Prima"
12: End If
13: End Function
Sub Lambdas
Selain menggunakan “Function” keyword untuk membuat multiline lambda yang mengembalikan nilai, anda juga dapat menggunakan multiline lambda yang tidak mengembalikan nilai menggunakan “sub” keyword .
1: Dim arrNama() As String = {"erick", "ricky", "joni"} 2: Array.ForEach(arrNama, Sub(n As String)
3: Dim balik = ""
4: For i = n.Length - 1 To 0 Step -1
5: balik &= n(i)
6: Next
7: Console.WriteLine(balik)
8: End Sub)
outputnya:
Single line Sub Lambdas
Pada VB9 anda hanya dapat menggunakan single expression lambda jika ada return valuenya, misal:
1: Dim bil() As Integer = {1, 3, 4, 5, 8, 10} 2: Dim query = bil.Where(Function(n) n Mod 2 = 0)
3: For Each num In query
4: Console.WriteLine(num)
5: Next
Akan error jika anda tuliskan kode berikut pada VB9:
1: Dim bil() As Integer = {1, 3, 4, 5, 8, 10} 2: Array.ForEach(bil, Sub(n) Console.WriteLine(n))
Pada VB10, anda dapat menggunakan keyword “sub” untuk membuat single expression yang tidak mengembalikan nilai
1: Dim bil() As Integer = {1, 3, 4, 5, 8, 10} 2: Array.ForEach(bil, Sub(n) Console.WriteLine(If(n Mod 2 = 0, "Genap :" & n, "Ganjil :" & n)))