New Visual Basic 11 Iterator Modifier and Yield Keyword

.NET Framework , Posted at : Mar/05/2012  
2429 Views   0 Comments

Pada saat artikel ini ditulis Visual Basic (VB) sudah memasuki versi ke 11. Terdapat beberapa fitur baru di VB 11 dari sisi sintaks atau bahasa. Salah satu fitur tersebut yaitu Iterator dan Yield. Contoh program yang akan ditulis kali ini juga menggunakan tools terbaru dari keluarga Visual Studio yaitu Visual Studio 2011 Beta 1. Tools tersebut dapat di download di link berikut ini : Visual Studio 2011 Beta.

Iterator merupakan modifier baru yang terdapat di VB 11 Beta 1 dan digunakan untuk membuat sebuah fungsi atau properti yang mengembalikan sebuah interface IEnumerable, IEnumerable (Of T), IEnumerator, atau IEnumerator (Of T). Fitur tersebut ditujukan untuk memudahkan developer dalam membuat custom iterasi dari sebuah Collection dimana penggunaannya digabungkan dengan perintah Yield. Perintah Yield akan mengembalikan nilai dari item-item yang terdapat di dalam collection.

Contoh kasus implementasi fitur tersebut yaitu filtering data collection dengan kriteria filterisasi yang ditentukan sehingga tidak semua data yang terdapat di dalam collection tersebut akan dikembalikan. Data hasil filtering tersebut di iterasi dengan perintah For Each.

Iterator modifier dapat di gunakan pada sebuah fungsi atau property. Selain itu juga anonymous method dan xml literal dapat memanfaatkan fitur iterator dan yield yang tentunya hal tersebut akan semakin memperluas jangkauan implementasi fitur iterator sehingga dapat digunakan sesuai dengan kondisi yang dihadapi pada saat membangun sebuah aplikasi.

Contoh penggunaan fitur baru tersebut akan saya buat dalam beberapa kasus dari mulai penggunaan Yield secara sederhana, penggunaan Iterator di sebuah fungsi dan penggunaan iterator di sebuah properti. Diasumsikan project yang digunakan yaitu berupa WPF Application dengan beberapa Button dan sebuah ListBox di dalam window nya.

1. Penggunaan Iterator dan Yield Sederhana :

Private Iterator Function HimpunanBilGanjil() _
        As IEnumerable(Of Integer)

        Yield 1
        Yield 3
        Yield 5

End Function

Kode di atas akan mengembalikan koleksi data berupa kumpulan bilangan integer yang berisi 1,3 dan 5 dan di kembalikan dengan menggunakan perintah Yield. Yield hanya akan bekerja apabila di dalam fungsi atau properti yang digunakan terdapat Iterator modifier.

Private Sub btnIterator1_Click(sender As Object,
                             e As RoutedEventArgs) _
                             Handles btnIterator1.Click
        lbItem.Items.Clear()

        For Each bilangan In HimpunanBilGanjil()
            lbItem.Items.Add(bilangan)
        Next
End Sub

Hasil iterasi fungsi HimpunanBilGanjil() dengan menggunakan looping For Each akan menampilkan nilai 1,3,5 di ListBox. Perintah Yield dalam sebuah Iterator modifier dapat menyederhanakan penulisan kode dengan menghilangkan pembuatan variabel sementara yang digunakan untuk menampung koleksi secara temporary. Perhatikan kode dibawah ini :

Private Iterator Function AmbilBilanganGanjil(
                              HimpunanBilangan() As Integer) _
                              As IEnumerable(Of Integer)

        For Each bilangan In HimpunanBilangan
            If bilangan Mod 2 <> 0 Then
                Yield bilangan
            End If
        Next

End Function

Dari kode yang terdapat di dalam fungsi diatas dapat dilihat dengan adanya penggunaan Iterator dan Yield maka variable collection level procedure yang biasa digunakan untuk menampung item-item yang diinginkan dari sebuah koleksi dapat dihilangkan dengan perintah Yield. Untuk menguji hasil eksekusi fungsi diatas ketikkan kode berikut ini :

Private Sub btnIterator2_Click(sender As Object,
                               e As RoutedEventArgs) _
                               Handles btnIterator2.Click

        lbItem.Items.Clear()

        Dim bilangan = {1, 2, 3, 4, 5}
        For Each bilGanjil In AmbilBilanganGanjil(bilangan)
            lbItem.Items.Add(bilGanjil)
        Next

End Sub

Event handler di atas akan menampilkan kumpulan bilangan ganjil dengan nilai 1, 3 dan 5.

2. Penggunaan Iterator dan Yield dalam Class Collection :

Perintah Iterator dan Yield bukan hanya dapat digunakan pada sekumpulan data yang memiliki tipe data primitive namun juga dapat digunakan pada sekumpulan data yang memiliki tipe data reference seperti Class. Asumsikan terdapat sebuah class yang diberi nama Client dan memiliki dua buah Property berupa Nama dan Kota :

Public Class Client
    Public Property Nama As String
    Public Property Kota As String
End Class

Untuk contoh berikutnya fitur tersebut akan diimplementasikan dalam sebuah ReadOnly Property seperti yang dapat dilihat pada kode program dibawah ini :

Private ReadOnly Iterator Property ClientInBandung(
                              Clients As IEnumerable(Of Client)) _
                              As IEnumerable(Of Client)

        Get
            For Each aClient In Clients
                If aClient.Kota = "Bandung" Then
                    Yield aClient
                End If
            Next
        End Get

End Property

Property di atas akan mengembalikan sekumpulan koleksi data berupa object Client yang hanya memiliki nilai “bandung” untuk nilai property Kota. Berikut contoh kode program untuk menjalankan Property tersebut :

Private Sub btnIterator3_Click(sender As Object,
                               e As RoutedEventArgs) _
                               Handles btnIterator3.Click

        Dim clients = New List(Of Client)
        clients.Add(New Client With {
                    .Nama = "Native Enterprise",
                    .Kota = "Bandung"})
        clients.Add(New Client With {
                    .Nama = "Microsoft Indonesia",
                    .Kota = "Jakarta"})

        lbItem.Items.Clear()
        For Each aClient In ClientInBandung(clients)
            lbItem.Items.Add(String.Format(
                             "{0} - {1}",
                             aClient.Nama, aClient.Kota))
        Next

End Sub
Hasil eksekusi kode di atas akan menghasilkan nilai “Native Enterprise – Bandung”.

3. Penggunaan Iterator dan Yield dalam Anonymous Method:

Implementasi lainnya dari Iterator dan Yield yaitu dapat digunakan dalam sebuah anonymous method berupa anonymous function. Hal tersebut berguna apabila kita akan membuat sebuah iterator yang hanya digunakan di dalam prosedur yang bersangkutan saja, misalnya untuk validasi input parameter dalam sebuah non-iterator method. Contoh kode yang terdapat di point no.2 sebelumnya di atas dapat di tulis ulang dengan menggunakan anonymous function dimana custom iterasinya di buat di dalam sebuah non-iterator prosedur. Perhatikan kode berikut ini :

Private Sub btnIterator4_Click(sender As Object,
                               e As RoutedEventArgs) _
                               Handles btnIterator4.Click

        Dim ClientInBandung = Iterator Function(
                                        AllClient As IEnumerable(Of Client))
                                  For Each aClient In AllClient
                                      If aClient.Kota = "Bandung" Then
                                          Yield aClient
                                      End If
                                  Next
                              End Function

        Dim clients = New List(Of Client)
        clients.Add(New Client With {
                    .Nama = "Native Enterprise",
                    .Kota = "Bandung"})
        clients.Add(New Client With {
                    .Nama = "Microsoft Indonesia",
                    .Kota = "Jakarta"})

        lbItem.Items.Clear()
        For Each aClient In ClientInBandung(clients)
            lbItem.Items.Add(String.Format(
                             "{0} - {1}", aClient.Nama, aClient.Kota))
        Next

End Sub

Hasil eksekusi kode di dalam event handler tersebut di atas akan menghasilkan nilai yang sama dengan kode yang terdapat di point no.2 (Penggunaan Iterator dan Yield dalam Class Collection). Tentunya penggunaan fitur baru tersebut bukan hanya sebatas ruang lingkup seperti yang dicontohkan pada point no.1 sampai point no.3, namun kita dapat menggunakannya dalam sebuah class yang mengimplementasikan interface IEnumerable atau IEnumerable (Of T).

Ok, sampai jumpa di blog post berikutnya yang akan membahas fitur-fitur baru lainnya di VB 11.


[Comments]

[Write your comment]
Name (required)
Email (required-will not published)
 
Comment

epfo
Input code above below (Case Sensitive) :
About Me 
Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Microsoft Certified Trainer | IT Trainer at Native Enterprise | IT Consultant | Software Developer | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.
[Read More...]
Top Download 
Mapping Hak Akses User Pada MenuStrip Sampai Control Button : Downloaded 6083 times  
Bagaimana caranya menginstal database ketika deploying sebuah aplikasi? : Downloaded 4689 times  
Simple Voice Engine Application With Sound Player Class... : Downloaded 3554 times  
Change Group,Sort Order, Filtering By Date in Crystal Reports : Downloaded 3324 times  
WinForms DataGrid Paging With SqlDataAdapter : Downloaded 2706 times  
Links 
Certifications 
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench
Native Enterprise 
Follow Me 
Facebook   LinkedIn   Twitter
Syndication 
Hosted By 
Native Enterprise News 
© Copyright 2006-2016   Rully Yulian MF   All rights reserved.