Fitur VB9 (Lambda Expression)

Halo, setelah lama absen posting tentang VB kangen juga untuk membahas fitur-fitur baru VB :), posting ini adalah posting kesembilan saya tentang fitur dari VB9 yaitu Lambda Expression, Mungkin anda sudah sering menggunakan Lambda Expression di C# 3.0, pada posting kali ini akan ditunjukan juga beberapa perbedaan fitur di VB dan C#. 

anda dapat melihat posting saya sebelumnya:

Lambda Expression adalah istilah yang diambil dari functional programming, Lambda Expression digunakan untuk memudahkan anda membuat fungsi/method. contoh penulisan Lambda Expression

Function (e) e + 1

fungsi diatas mempunyai satu parameter e, dan mengembalikan e+1.

Untuk menunjukan penggunaan Lambda Expression pada VB, maka sebagai contoh saya akan membuat array berisi integer dan memfilter yang nilainya > 6 dengan Lambda Expression

Sub Main()
Dim arrBil() = {4, 5, 7, 9, 12, 3, 2}
Dim filter = arrBil.Where(Function(b) b > 5)
For Each i In filter
Console.WriteLine(i)
Next
End Sub


Lambda Expression dan Delegates

Lambda Expression dapat digunakan untuk mempermudah penggunaan delegates di VB. Tanpa Lambda anda dapat menuliskan:

'deklarasi delegates
Public Delegate Function UbahInt(ByVal x As Integer) As Integer


'buat fungsi yang akan ditunjuk oleh delegates
Function Gandakan(ByVal x As Integer) As Integer
Return x * 2
End Function


Kemudian buat instance delegates sebagai berikut

Sub Main()
Dim mydel As UbahInt = New UbahInt(AddressOf Gandakan)
Console.WriteLine("{0}", mydel(5))
End Sub

Maka program diatas akan mencetak 10.

Dengan menggunakan Lambda Expression anda dapat menuliskan :

Public Delegate Function UbahInt(ByVal x As Integer) As Integer
Sub Main()
Dim mydel As UbahInt = Function(x) x * 2
Console.WriteLine(mydel(5))
End Sub

Program diatas juga akan mencetak 10 sama dengan sebelumnya, tapi dengan menggunakan Lambda Expression penambahan method menjadi lebih mudah :)


Menggunakan Lambda dengan Dua Parameter

Anda juga dapat menggunakan Lambda dengan dua parameter, cara penulisannya:

'delegates dengan dua parameter
Public Delegate Function Kali(ByVal x As Integer, ByVal y As Integer) As Integer


'mencetak 5*6=30
Sub Main()
Dim mydel = Function(x, y) x * y
Console.WriteLine(mydel(5, 6))
End Sub


Anda juga dapat menggunakan Select() extension method dengan Lambda Expression yang mempunyai dua parameter, parameter pertama untuk nilai sedangkan parameter kedua untuk index

Dim nama() = {"erick", "wely", "sony", "ridi"}
Dim filter = nama.Select(Function(x, i) "Nama ke " + i.ToString() + " : " + x)
For Each i In filter
Console.WriteLine(i)
Next

jika program dijalankan akan mencetak:

image  


Statement Lambda Expression

VB9 belum mendukung Statement Lambda Expression seperti yang ada pada C# 3.0, VB akan mensupport fitur ini pada versi VB10. Jika menggunakan Statement Lambda Expression di C# anda dapat menuliskan:

//menggunakan Statement Lamda pada C# 
string[] nama = new[] { "erick","wely","sony","ridi","eriawan" };

foreach (string n in nama.Where(
x => {
if (x.Contains("eri"))
return true;
else
return false;
}
))

Console.WriteLine(n);

dengan VB9 anda dapat menghasilkan output yang sama dengan menuliskan kode sebagai berikut:

Function CekNama(ByVal nama As String)
If nama.Contains("eri") Then
Return True
Else
Return False
End If
End Function

Sub Main()
Dim nama() = {"erick", "wely", "sony", "eriawan"}
Dim filter = nama.Where(Function(x) CekNama(x))
For Each n In filter
Console.WriteLine(n)
Next
End Sub

maka akan dicetak output:

image 

happy coding ^_^

Share this post: | | | |
Published Thursday, April 02, 2009 12:24 AM by Erick Kurniawan
Filed under: , ,

Comments

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