Rabu, 29 September 2010

Visual Basic 2010 a.k.a VB 10 a.k.a VBx

Visual Basic tidak dapat dipungkiri merupakan salah satu bahasa pemrograman yang digunakan untuk memproduksi aplikasi yang memiliki kepopuleran yang sangat tinggi. Visual Basic sendiri lahir pada tahun 1991. Ini berarti sampai saat ini, bahasa ini telah berusia 19 tahun (hem.. sebuah pencapaian yang luar biasa – bisa exist sampai saat ini).

VB 10 merupakan rilis pertama dari strategi co-evolution yang digencarkan oleh Microsoft saat ini. visi dari coevolution ini adalah untuk menyelaraskan agar baik VB atau pun C# diharapkan memiliki fitur yang seimbang.

VB 10 didesain untuk membantu developer lebih produktif lagi dengan menyediakan fitur-fitur yang bisa meringkas banyaknya kode program yang harus diketikkan pada sebuah program.

berikut ini beberapa fitur baru yang dikenalkan pada rilis ke 10 dari Visual Basic:

1. Implicit Line Continuation

perintah dalam VB adalah berorientasi baris, dimana sintaks yang digunakan kebanyakan menggunakan kata-kata dalam bahasa inggris sehingga mudah untuk dimengerti. tapi hal ini kadang kala menyebabkan programmer harus menuliskan perintah yang panjang. nah, selama ini untuk membuat sebuah perintah yang panjang agar dapat lebih mudah untuk dibaca tanpa perlu banyak melakukan scrolling layar, programmer akan memecah baris perintah tersebut menjadi beberapa baris perintah dengan memisahkan baris tersebut secara logic dengan menggunakan karakter underscore ( _ ). nah, di versi 10 ini, pemakaian karakter underscore tersebut menjadi optional untuk sebagian kasus karena compiler VB versi 10 saat ini sudah dapat membedakan apakah beberapa baris perintah tersebut merupakan sebuah rangkaian perintah tunggal atau merupakan beberapa perintah yang terpisah.

Contoh:

Code Pada VB 9:

Dim data() As Integer = _
New Integer() { _
1, _
2, _
3 _
}


Code pada VB 10:




Dim data() As Integer =

            New Integer() {


                1,


                2,


                3


            }




beberapa skenario di mana karakter underscore boleh ditiadakan adalah:



- setelah penulisan attribut <Extension()>



- setelah tanda ( (kurung buka) pada saat deklarasi method



- setelah tanda , (koma) pada penulisan parameter



- sebelum tanda ) (kurung tutup) pada saat deklarasi method



- setelah tanda = (sama dengan)



- setelah tanda <%= (tag pembuka untuk ekspresi embedded)



- setelah tanda & (ampersand) pada penulisan XML Literal



- sebelum tanda %> (tag penutup untuk ekspresi embedded)



- dan pada tanda-tanda seperti yang ditampilkan pada gambar berikut ini:



Implicit Line Continuation 



2. Statement Lambda



lambda secara sederhana dapat diartikan sebagai fungsi yang didefinisikan di dalam fungsi yang lain.



VB 9 mengenalkan lambda expressions dengan keyword Function




Dim cust() as Customer = ….



Array.FindAll(cust, Function(c) c.Country = “Indonesia”)




lambda expressions memberikan cara yang lebih ringkas dan kompak untuk mengekspresikan logic secara lokal tanpa perlu memecahnya menjadi beberapa method yang saling berkaitan. sebagai contoh, berikut ini adalah bentuk sample code yang sama seperti contoh di atas, namun tanpa menggunakan lambda expressions




Dim query = Array.FindAll(cust, AddressOf Filter)





Function Filter(ByVal c as Customer) As Boolean



     Return c.Country = “Indonesia”



End Function




tapi sayangnya, lambda expressions yang dikenalkan dan digunakan dalam VB 9 mengharuskan sebuah lambda expressions untuk mengembalikan sebuah nilai, sehingga untuk penggunaan seperti kasus berikut:




Array.ForEach(cust, Function(c) Console.WriteLine(c.Country)



 




akan menyebabkan terjadinya error seperti berikut:



'Compile error: "Expression does not produce a value."


Console.WriteLine adalah sebuah prosedur, sehingga tidak mengembalikan sebuah nilai, yang mana akan menyebabkan compiler membangkitkan pesan kesalahan. untuk deal dengan situasi ini, VB 10 kemudian mengenalkan Statement Lambdas, yaitu lambda yang dapat berisi satu atau lebih statement.



sehingga code yang error di atas dapat kita ubah menjadi:




Array.ForEach(cust, Sub(c) Console.WriteLine(c.Country)



 




code di atas dapat berjalan dengan baik.



contoh lain penggunaan statement lambdas:



Array.ForEach(cust, Sub(c)
Console.WriteLine("Country Name:")
Console.WriteLine(c.Country)
End Sub)


statement lambdas ini juga dapat digunakan untuk membangun Event Handler secara dinamis, seperti yang ditunjukkan pada contoh berikut.



AddHandler b.Click, Sub(sender As Object, e As EventArgs)
MsgBox("Button Clicked")
'Ketikkan code selanjutnya
End Sub


dan anda juga dapat mengkombinasikan statement lambdas ini dengan fitur relaxed delegates yang sudah tersedia di VB 9. (red. delegate adalah type safe pointer to functions, yang dapat digunakan untuk mengeksekusi beberapa method sekaligus). kombinasi ini menghasilkan signature event yang lebih sederhana seperti ditunjukkan pada code berikut ini:



AddHandler b.Click, Sub()
MsgBox("Button Clicked")
'ketikkan code selanjutnya
End Sub


relaxed delegate memungkinkan anda untuk menghilangkan parameter pada event handler.



VB 10 juga menambahkan support untuk multi-line function lambdas.



Dim query = cust.Where(Function(c)
'Return only customers that have not been saved
'insert more complex logic here
Return c.ID = -1
End Function)


aspek menarik lainnya dari statement lambdas ini adalah cara yang digunakan untuk beririsan dengan fitur anonymous delegates yang diperkenalkan pada VB 9. anonymous delegates terjadi ketika compiler VB meng-infers sebuah tipe delegate berdasarkan signature method dari sebuah function lambdas.



Dim method = Function(product As String)
If product = "Paper" Then
Return 4.5 'units in stock
Else
Return 10 '10 of everything else
End If
End Function

MsgBox(method("Paper"))


pada code di atas, compiler akan mengenerate sebuah delegate secara otomatis dengan bentuk seperti berikut ini:



Delegate Function $compilerGeneratedName$(product As String) As Double


ini yang disebut dengan anonymous delegate, karena delegate tersebut hanya kelihatan di sisi compiler, karena memang delegate tersebut digenerate oleh compiler sendiri, bukan pada code yang ditulis oleh programmer. perhatikan bahwa compiler meng-infers return type nya dengan tipe double. karena tipe ini yang paling dominan.



tapi kita juga diperkenankan untuk menuliskan return type dari anonymous delegate tersebut seperti bentuk berikut ini:



'Notice the "As Single"
Dim method = Function(product As String) As Single
If product = "Paper" Then
Return 4.5 'units in stock
Else
Return 10 '10 of everything else
End If
End Function


atau



Dim method As Func(Of String, Single) =
Function(product)
If product = "Paper" Then
Return 4.5 'units in stock
Else
Return 10 '10 of everything else
End If
End Function


3. Auto-Implemented Properties



dalam VB, properties adalah member dari class yang digunakan untuk mengexpose state dari object agar dapat diakses dari luar dari class yang bersangkutan. bentuk deklarasi properties yang digunakan sampai dengan VB 9 adalah seperti berikut ini:



Private _country As String
Property Country As String
Get
Return _country
End Get
Set(ByVal value As String)
_country = value
End Set
End Property


jika dilihat, 9 baris perintah di atas digunakan untuk membuat hanya satu buah properties. dengan penulisan seperti ini, jika kita harus mendeklarasikan banyak properties sekaligus, akan menyebabkan programmer harus mengetikkan kode program yang hampir mirip seperti di atas secara berulang-berulang. hal ini tentunya tidak efisien. nah, pada VB 10, dikenalkanlah fitur auto-implemented properties untuk mempermudah proses pembuatan properties seperti di atas menjadi berbentuk one line of code seperti code berikut ini:




Public Property Country As String



 




pada kasus ini, compiler akan secara otomatis mengenerate Getter, Setter dan Backing Fields. nama dari backing fields akan selalu dimulai dengan tanda underscore diikuti oleh nama dari property yang ada, dalam contoh ini akan menjadi _Country



anda juga bisa langsung menginisialisasikan sebuah nilai awal saat mendeklarasikan sebuah property seperti ditunjukkan pada contoh berikut:




Public Property ID As Integer = –1



 




dan walaupun sudah disediakan auto-implemented properties ini, anda juga masih bisa menggunakan cara deklarasi property dengan menggunakan cara yang disediakan oleh VB 9. hal ini diperlukan misalnya untuk property yang memerlukan proses yang kompleks seperti melakukan pengecekan.



4. Collection Initializers



ketika menggunakan object yang bertipe collection, untuk mempopulasi data inisialisasi ke dalam object yang bersangkutan biasanya digunakan dengan memanggil method Add dari object collection yang bersangkutan, seperti yang ditunjukkan pada contoh berikut:




Dim data As New List(Of String)



data.Add(“Satu”)

data.Add(“Dua”)


data.Add(“Tiga”)





tidak ada yang salah dari code di atas, namun kita harus melakukan proses populasi data dengan memanggil method Add secara berulang-ulang. nah, pada VB 10, dikenalkan sebuah fitur yaitu collection initializers yang mengizinkan anda untuk memberikan nilai inisialisasi ke object collection dengan lebih ringkas dan mudah, seperti yang ditunjukkan pada code berikut ini:




Dim data As New List(Of String) From {“Satu”, “Dua”, “Tiga”}



 




compiler VB secara otomatis akan memanggil method Add untuk mempopulasikan setiap data yang ada.



collection initializers dapat digunakan terhadap semua data type yang memenuhi requirement berikut ini:





  • dapat melakukan iterasi terhadap data type tersebut dengan menggunakan For Each statement. hal ini bisa dilakukan terhadap semua data type yang mengimplementasikan interface IEnumerable.




  • data type tersebut memiliki constructor default (constructor tanpa parameter) yang dapat diakses.




  • data type tersebut memiliki method yang bernama Add yang dapat diakses.




contoh lain:




Dim lookupTable As New Dictionary(Of Integer, String) From {

          {1, “One”},


          {2, “Two”},


          {3, “Three}


}




anda juga dapat menyediakan custom implementasi method Add dengan menggunakan extension method, seperti ditunjukkan pada contoh code berikut:



<Extension()>
Sub Add(ByVal source As IList(Of Customer),
ByVal id As Integer,
ByVal name As String,
ByVal city As String)

source.Add(New Customer With
{
.ID = id,
.Name = name,
.City = city
})
End Sub


method ini mengextend data type apa saja yang mengimplementasikan IList(Of Customer) dan kemudian mengizinkan anda menggunakan sintaks collection initializer seperti berikut:



Dim list = New List(Of Customer) From
{
{1, "Jon", "Redmond"},
{2, "Bob", "Seattle"},
{3, "Sally", "Toronto"}
}


collection initializers ini juga dapat anda gunakan pada saat anda menginisialisasikan sebuah nilai saat menggunakan auto-implemented properties.



5. Array Literals



VB 10 juga menyediakan cara pendekatan baru yang lebih memudahkan ketika anda bekerja dengan menggunakan array.



pada VB 9, array bisa dibuat dengan pendekatan seperti berikut:




Dim numbers() As Integer = New Integer() {1, 2, 3, 4, 5}



 




dengan menggunakan array literals, penulisan sintaks di atas bisa disingkat menjadi:




Dim numbers = {1, 2, 3, 4, 5}



 




array literal dibuat dengan meletakkan elemen yang akan dimasukkan ke dalam array dengan menggunakan tanda kurung kurawal, dan membiarkan compiler menginfers data type yang cocok untuk digunakan secara otomatis. untuk keperluan ini, harus dipastikan nilai dari Option Strict adalah On.



array literals juga dapat digunakan untuk array multi-dimensi dan jagged array, seperti yang ditunjukkan pada code berikut ini:




‘ 2-dimensional array

Dim matrix = {{1, 0}, {0,1}}



‘ jagged array

Dim jagged = {({1, 0}), ({0, 1, 2})}



 




6. Dynamic Language Runtime



7. Generic Variance



8. Improved Optional Parameters



9. Embed Interop Types



10. Multi Targeting



5 fitur baru selanjutnya (dari no. 6 s/d 10) akan kita bahas di kesempatan yang lain.



selain fitur-fitur baru yang dikenalkan pada VB 10, IDE VB  10 juga mengalami peningkatan kemampuan yang banyak. seperti:





  • Navigate To




  • Highlight References




  • Generate From Usage




  • Better IntelliSense (Substring matching, camel-case lookup, suggestion mode – usefull for “test first” style of development)




  • Multi-Monitor Support




  • Zooming




    Semoga Bermanfaat




      Rgds

      Adi

    Aplikasi Pengolahan Data Alamat Kontak

    berikut ini adalah sebuah aplikasi pengolahan data alamat kontak yang penulis buat, bermanfaat untuk menyimpan data-data alamat kontak baik itu berupa data kontak teman, kerabat keluarga dan atau rekan bisnis.

    berikut ini screenshot dari aplikasi

    1

    2

    anda bisa mendownload dan menggunakan aplikasi ini dengan bebas dengan mengunduhnya dari link di sini.

    untuk bisa menjalankan aplikasi ini, pastikan komputer anda sudah terinstall .NET Framework 4.0. jika blom, anda bisa mengunduhnya dan menginstallnya dari situs ini atau yang ini.

    Semoga Bermanfaat ^-^

    Rgds
    Adi

    Rabu, 22 September 2010

    Memanfaatkan File Biner Untuk Menyimpan Gambar

    selain file teks, kita juga bisa membuat dan menggunakan file biner. di dalam VB.NET, juga sudah disediakan cara instant jika kita ingin membuat dan membaca ke dan dari file biner secara intantly.

    untuk menulis ke dalam file biner, gunakan:

    My.Computer.FileSystem.WriteAllBytes(Filename:string, Content:byte(), Append:boolean)

    sedangkan jika kita ingin membaca isi dari sebuah file teks, gunakan:

    My.Computer.FileSystem.ReadAllBytes(Filename:string):byte()

    contoh berikut ini ditulis dengan menggunakan VB 10 (VS 2010):

    Form:

    ContohFileBiner

    Code:

    Public Class FrmDemoFileBiner

        Private Sub btnBukaGambar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBukaGambar.Click
            Using ofd As New OpenFileDialog()
                With ofd
                    .Title = "Buka File Gambar"
                    .Filter = "JPEG File (*.JPG)|*.jpg"
                    .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyPictures
                    .Multiselect = False
                    .CheckPathExists = True
                    .CheckFileExists = True
                    .FileName = ""
                    If .ShowDialog() = Windows.Forms.DialogResult.OK Then
                        If .FileName <> "" Then
                            Me.PicBox.Image = Image.FromFile(.FileName)
                            Me.lblKeterangan.Text = String.Format("NamaFile: {0}", .FileName)
                        End If
                    End If
                End With
            End Using
        End Sub

        Private Sub btnBukaBiner_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBukaBiner.Click
            Using ofd As New OpenFileDialog()
                With ofd
                    .Title = "Buka File Biner"
                    .Filter = "Binary File (*.Bin)|*.bin"
                    .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyPictures
                    .Multiselect = False
                    .CheckPathExists = True
                    .CheckFileExists = True
                    .FileName = ""
                    If .ShowDialog() = Windows.Forms.DialogResult.OK Then
                        If .FileName <> "" Then
                            ' membaca dari file biner dan menampilkan ke PicBox
                            Me.PicBox.Image =
                                DirectCast(
                                    New ImageConverter().ConvertFrom(My.Computer.FileSystem.ReadAllBytes(.FileName)),
                                    Image)
                            Me.lblKeterangan.Text = String.Format("NamaFile: {0}", .FileName)
                        End If
                    End If
                End With
            End Using
        End Sub

        Private Sub btnSimpanAsBiner_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSimpanAsBiner.Click
            Try
                Using sfd As New SaveFileDialog()
                    With sfd
                        .Title = "Simpan Gambar As File Biner"
                        .Filter = "Binary File (*.Bin)|*.bin"
                        .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyPictures
                        .CheckPathExists = True
                        .OverwritePrompt = True
                        .DefaultExt = ".bin"
                        .FileName = "MyBinaryFile.bin"
                        If .ShowDialog() = Windows.Forms.DialogResult.OK Then
                            If .FileName <> "" Then
                                ' menulis ke file biner
                                My.Computer.FileSystem.WriteAllBytes(
                                    .FileName,
                                    DirectCast(New ImageConverter().ConvertTo(Me.PicBox.Image, GetType(Byte())), Byte()),
                                    False)
                            End If
                        End If
                    End With
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub

        Private Sub btnBersihkanPicBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBersihkanPicBox.Click
            Me.PicBox.Image = Nothing
            Me.lblKeterangan.Text = "NamaFile:"
        End Sub

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.lblKeterangan.Text = "NamaFile:"
        End Sub

    End Class

    beberapa point penting yang harus diperhatikan dari code di atas adalah sebagai berikut:

    My.Computer.FileSystem.WriteAllBytes(
           .FileName,
           DirectCast(
                New ImageConverter().ConvertTo(Me.PicBox.Image, GetType(Byte())), Byte()),
                False)


    potongan code di atas bertugas untuk menyimpan gambar ke dalam sebuah file biner.

    isi content yang akan ditulis ke dalam file biner harus dikonversi terlebih dahulu ke dalam format array of byte (byte()). pada contoh code di atas, digunakan class ImageConverter dan Method ConvertTo untuk melakukan konversi object Image ke dalam byte(). potongan code untuk konversinya bisa dilihat di bawah ini

    DirectCast(New ImageConverter().
                                ConvertTo(Me.PicBox.Image, GetType(Byte())), Byte())

     

    method DirectCast digunakan untuk mengkonversi hasil dari method ConvertTo ke dalam byte() karena method ConvertTo ini akan menghasilkan tipe data balik dalam bentuk Object.

    potongan code berikutnya yang harus diperhatikan adalah:

    Me.PicBox.Image =
            DirectCast(New ImageConverter().
                   ConvertFrom(My.Computer.FileSystem.ReadAllBytes(.FileName)), 
                   Image)


    potongan code di atas berfungsi untuk membaca isi dari file biner. karena kembalian dari method ReadAllBytes adalah dalam bentuk byte(), maka kita perlu melakukan konversi kembali dari byte() menjadi sebuah Image. hal ini bisa dilakukan dengan menggunakan class ImageConverter dan method ConvertFrom. karena method ConvertFrom ini akan menghasilkan tipe data balik berupa Object, maka kita harus cast kembali tipe data tersebut menjadi Image dengan menggunakan bantuan method DirectCast.

    berikut ini bentuk tampilan program ketika dijalankan:

    ContohFileBiner-Running

    ok, sekian dari saya, semoga bermanfaat bagi kita semua.

     

    Rgds
    Adi

    Cara Menulis dan Membaca File Teks dengan Cepat dan Tepat

    VB.NET menyediakan cara yang sangat instant melalui Namespace My jika kita ingin menulis dan membaca dari sebuah file teks dengan instantly.

    untuk menulis ke dalam file teks, gunakan:

    My.Computer.FileSystem.WriteAllText(Filename:string, Content:string, Append:boolean)

    sedangkan jika kita ingin membaca isi dari sebuah file teks, gunakan:

    My.Computer.FileSystem.ReadAllTeks(Filename:string):string

    contoh berikut ini ditulis dengan menggunakan VB 10 (VS 2010):

    Form:

    ContohFileTeks

    Code:

    Public Class FrmDemoFileTeks

        Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
            Try
                Using sfd As New SaveFileDialog()
                    With sfd
                        .Title = "Simpan File"
                        .Filter = "Teks File (*.Txt)|*.txt"
                        .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyPictures
                        .CheckPathExists = True
                        .OverwritePrompt = True
                        .DefaultExt = ".txt"
                        .FileName = "FileTeks.txt"
                        If .ShowDialog() = Windows.Forms.DialogResult.OK Then
                            If .FileName <> "" Then
                                ' menyimpan isi dari RichTextBox ke dalam file
                                My.Computer.FileSystem.WriteAllText(
                                    .FileName,
                                    Me.RichTextBox1.Text,
                                    False)
                            End If
                        End If
                    End With
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub

        Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click
            Using ofd As New OpenFileDialog()
                With ofd
                    .Title = "Buka File"
                    .Filter = "Teks File (*.Txt)|*.txt"
                    .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyPictures
                    .CheckPathExists = True
                    .CheckFileExists = True
                    .Multiselect = False
                    .FileName = ""
                    If .ShowDialog() = Windows.Forms.DialogResult.OK Then
                        If .FileName <> "" Then
                            Me.RichTextBox1.Clear()
                            ' membaca isi file dan menampilkannya
                            Me.RichTextBox1.AppendText(
                                My.Computer.FileSystem.ReadAllText(.FileName))
                        End If
                    End If
                End With
            End Using
        End Sub

        Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
            Me.RichTextBox1.Clear()
            Me.lblBanyakKarakter.Text = "0"
        End Sub

        Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
            Me.lblBanyakKarakter.Text = Me.RichTextBox1.TextLength.ToString()
        End Sub

    End Class

    point penting yang perlu diperhatikan dari code di atas adalah:

    My.Computer.FileSystem.WriteAllText(.FileName, Me.RichTextBox1.Text, False)


    potongan code di atas bertugas untuk menyimpan isi dari RichTextBox1 ke dalam file di mana modus append nya adalah false.

    My.Computer.FileSystem.ReadAllText(.FileName)

     

    potongan code di atas bertugas untuk membaca isi dari file sesuai dengan nama file yang ditentukan oleh user melalui sebuah OpenFileDialog box.

    kemudian, karena kita padukan codenya menjadi seperti berikut

    Me.RichTextBox1.AppendText(My.Computer.FileSystem.ReadAllText(.FileName))


    code di atas memiliki arti, baca isi dari file dan kemudian tampilkan isi dari filenya ke dalam RichTextBox1.

    berikut ini bentuk tampilan ketika program dijalankan.

    ContohFileTeks-Running

    ok, sekian dari saya, semoga bermanfaat bagi kita semua.

     

    Rgds
    Adi

    Hero – By Mariah Carey

    There's a hero if you look inside your heart
    You don't have to be afraid of what you are.
    There's an answer if you reach into your soul
    and the sorrow that you know will melt away

    And then a hero comes along
    with the strength to carry on
    and you cast your fears aside
    and you know you can survive.

    So, when you feel like hope is gone
    look inside you and be strong
    and you'll finally see the truth
    that a hero lies in you.

    It's a long road when you face the world alone,
    No one reaches out a hand for you to hold.
    You can find love if you search within yourself
    and the emptiness you felt will disappear.

    And then a hero comes along
    with the strength to carry on
    and you cast your fears aside
    and you know you can survive.

    So, when you feel like hope is gone
    look inside you and be strong
    and you'll finally see the truth
    that a hero lies in you.

    oh, ohhh,Lord knows dreams are hard to follow,
    But don't let anyone tear them away.
    Hold on, there will be tomorrow,
    In time you'll find the way

    And then a hero comes along
    with the strength to carry on
    and you cast your fears aside
    and you know you can survive.

    So, when you feel like hope is gone
    look inside you and be strong
    and you'll finally see the truth
    that a hero lies in you
    that a hero lies in ... you
    mmmm that a hero lies in.....you.

    Kamis, 16 September 2010

    Penggunaan LINQ Untuk Group dan Count Elemen Data

    misalkan kita memiliki koleksi data dalam sebuah file yang isinya lebih kurang seperti berikut ini:
    001
    002
    003
    004
    005



    001
    001


    kita misalkan nama filenya adalah Angka.Txt.

    nah untuk mendapatkan jumlah kemunculan dari masing-masing data yang ada di atas, dapat ditempuh dengan menggunakan beberapa pendekatan, salah satu pendekatan yang bisa ditempuh adalah dengan menggunakan LINQ yang merupakan salah satu fitur yang dapat kita manfaatkan sejak versi VB 9.0.

    LINQ (Language Integrated Query) adalah query yang terintegrasi ke dalam bahasa pemrograman VB untuk memudahkan kita melakukan query terhadap sebuah koleksi data, salah satunya seperti pada contoh yang digunakan di atas.

    berikut ini cara penyelesaian yang dilakukan:
    1. Buat sebuah Project. kali ini yang digunakan adalah sebuah project yang berbasis Console Application. berikan nama project sesuai dengan keinginan anda.
    2. ketik code berikut ini:
    Imports System.IO

    Module Module1

        Sub Main()
            Dim content = File.ReadAllLines("Angka.Txt")
            Dim dup = From el In content _
                      Group el By el Into e = Count() _
                      Order By e Descending _
                      Select el, e
            For Each item In dup
                Console.WriteLine(String.Format(“{0} = {1}”, item.el, item.e)
            Next
        End Sub

    End Module

    3. Run dan lihat hasil yang diperoleh ;-)

    Penjelasan:
    LINQ pada code di atas terdapat pada potongan code berikut:
    Dim dup = From el In content _
                      Group el By el Into e = Count() _
                      Order By e Descending _
                      Select el, e
    pada potongan code tsb, compiler diminta untuk men-group-kan data yang ada berdasarkan elemen-elemen yang ada di dalam koleksi data yang dibaca, dan kemudian dari hasil grouping tsb, hitung jumlah elemennya masing-masing, kemudian urutkan berdasarkan jumlah elemen data secara descending.

    nah, jika diamati dengan seksama, apa sebenarnya yang terjadi dengan code di atas ?
    ya, code tsb (red. Query di atas) memberikan perintah ke compiler dengan memberitahukan ke compiler apa yang diinginkan oleh code tsb, tapi code tsb tidak memberitahukan bagaimana cara mendapatkan output yang diinginkan. ini yang disebut dengan paradigma “Declarative Style”, dimana programmer cukup menuliskan code yang menerangkan “apa yang harus dikerjakan oleh compiler, bukan memberitahukan ke compiler bagaimana mengerjakan pekerjaan tsb (red. Imperative Style), untuk ururan bagaimana, serahkan ke compiler untuk mencari cara terbaik yang dimiliki oleh kemampuan compiler yang bersangkutan”.

    berikut contoh tampilan output program yang dihasilkan:
    Output

    Rgds
    Adi

    Rabu, 01 September 2010

    Kembali Lagi …

    Hi all, apa kabar ? sudah lama tidak menulis artikel di blog ;-)  dan tidak terasa sekarang sudah memasukin tgl 1 september 2010 (hus… time move so fast …)

    ingin aktif menulis kembali, so …  stay tune all.

    Rgds
    Adi