Fitur VB10 (Multiline Lambdas)

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 :

image

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 :

image

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:

image

 

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)))
Share this post: | | | |
Published Thursday, May 07, 2009 12:39 AM by Erick Kurniawan

Comments

# Fitur VB10 (Implicit Line Continuation)

Thursday, May 07, 2009 12:43 AM by Erick Kurniawan

Blog sebelumnya seputar VB10 dapat anda baca di: Fitur VB10 (Multiline Lambdas) Pada bahasa VB kita biasanya

# Fitur VB10 (Implicit Line Continuation)

Thursday, May 07, 2009 12:50 AM by Erick Kurniawan

Blog sebelumnya seputar VB10 dapat anda baca di: Fitur VB10 (Multiline Lambdas) Pada bahasa VB kita biasanya

# Fitur VB10 (Auto-implemented Properties)

Monday, June 22, 2009 10:01 AM by Erick Kurniawan

Blog sebelumnya seputar VB10 dapat anda baca di: Fitur VB10 (Multiline Lambdas) Fitur VB10 (Implicit

# Fitur VB10 « Actual Training

Monday, June 22, 2009 7:48 PM by Fitur VB10 « Actual Training

Pingback from  Fitur VB10 « Actual Training

# Fitur VB10 (Collection Initializer)

Saturday, July 11, 2009 10:37 PM by Erick Kurniawan

Blog sebelumnya seputar Fitur-fitur VB10 dapat anda baca di: Fitur VB10 (Multiline Lambdas) Fitur VB10

# Fitur VB10 (Collection Initializer)

Saturday, July 11, 2009 10:46 PM by Erick Kurniawan

Blog sebelumnya seputar Fitur-fitur VB10 dapat anda baca di: Fitur VB10 (Multiline Lambdas) Fitur VB10

Powered by Community Server (Commercial Edition), by Telligent Systems