Forum Wallet
Wallet Address
Balance 381.322,50

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Kesederhanaan Didalam Visual Basic .Net
#1
Yang Digunakan
Pada awal menulis postingan ini, maka komponen yang digunakan adalah sebagai berikut:
  • Visual Basic .Net 2010 Express.
  • Windows 7 Service Pack 1.
Perlu anda ketahui, anda juga memerlukan panduan seperti CD/DVD MSDN alias Microsoft Developer Network. Mengingat apa yang saya tulis pada postingan ini selalu bersumber/berkiblatkan ke MSDN.
Awal Kata
Dahulu, ketika saya baru pertama kali mengenal Visual Basic .Net, tepatnya versi 2003. Saya sangat terkesan dengan keberadaan Class ataupun Structure, yang mana bisa digunakan untuk membangun tabel data secara in-memory. Dan caranya pun juga cukup sederhana, anda cukup membangun classnya sebagai berikut:
Public Class Identitas
    Dim nd As String
    Property NamaDepan As String
        Get
            Return nd
        End Get
        Set(ByVal value As String)
            nd = value
        End Set
    End Property
    Dim nb As String
    Property NamaBelakang As String
        Get
            Return nb
        End Get
        Set(ByVal value As String)
            nb = value
        End Set
    End Property
    Sub New()
        MyBase.New()
    End Sub
    Sub New(ByVal NamaDepan As String, ByVal NamaBelakang As String)
        MyBase.New()
        Me.NamaDepan = NamaDepan
        Me.NamaBelakang = NamaBelakang
    End Sub
End Class
Penulisan kode diatas ini adalah cara untuk membuat sebuah class yang bisa digunakan untuk menampung identitas seseorang, yaitu menampung nama depan dan nama belakang seseorang. Nah, pada dasarnya wujud dari tabel data adalah sebuah class (ataupun structure) yang digandakan. Dan untuk membuktikan kata-kata saya tersebut, maka saya akan membangun sebuah form guna menerapkan class Identitas yang telah saya buat sebagai berikut:
Public Class FormIdentitas
    Inherits Form
 
    Private Sub eLoad() Handles MyBase.Load
        Text = "Form Identitas"
        Padding = New Padding(4)
        Size = New Size(300, 150)
 
        Dim db() As Identitas = _
              {New Identitas("Abu", "Anas"), _
               New Identitas("Hengky", "Purnomo"), _
               New Identitas("Wahyu", "Pratama")}
        Dim dgv As New DataGridView With {.Parent = Me, .Dock = DockStyle.Fill, .DataSource = db}
    End Sub
End Class
Perlu anda ketahui, penulisan kode diatas ini adalah bagaimana caranya saya membangun sebuah form hanya dengan bermodalkan penulisan kode saja. Jadi tidak ada Design View dan drag & drop sama sekali. Mengingat saya orang yang paling antipati dengan keberadaan Design View beserta drag & drop semenjak saya mengenal (hingga menjadi) programmer Visual Basic .Net. Dan sekarang, kalau anda jalankan form diatas, maka hasilnya akan seperti gambar dibawah ini:
[Image: open?id=1KFIEM9LT1-vfxq4Oli4onrUlhte7VIH-]
Nah, inilah dia salah satu keunggulan yang dimiliki dari Visual Basic .Net dibandingkan dengan Visual Basic klasik (hitungan versi 1 hingga versi 6). Dimana Visual Basic .Net selalu berusaha untuk bisa menyederhanakan segala macam bentuk kerumitan. Sayangnya, banyak sekali programmer (dari Visual Basic .Net sendiri, khususnya dari Indonesia) yang tidak menyadarinya. Mengingat kebanyakan dari mereka hanya senang bermain di level Design View beserta drag & dropnya. Sayang sekali.

Lahirnya Generic

Pada Visual Basic .Net 2005 (atau Visual Basic 8) dan juga C# 2005, tepatnya pada .Net Framework versi 2.0. Lagi-lagi saya dibuat terkesan dengan adanya teknologi baru yang dibenamkan oleh Microsoft kepada OOP-nya, yaitu adanya generic. Generic adalah satu-satunya hal yang membuat rasa cinta dan benci menjadi satu. Saya katakan demikian dikarenakan generic membuat saya kian mencintai area penulisan kode. Tetapi, di sisi lain kian membuat saya membenci area Design View, hal ini dikarenakan generic tidak bisa diterapkan pada area tersebut, hahaha. Dan yang membuat saya kian mencintai generic adalah kian meringankan beban saya ketika harus membuat variabel. Seperti yang anda lihat pada penulisan kode yang ada pada class Identitas. Anda telah melihat bahwasannya saya membuat dua variabel sebagai penampung nilai, yaitu variabel nd untuk menampung nama depan seseorang, dan variabel nb untuk menampung nama belakang seseorang. Dikarenakan class yang saya buat masih bersifat sederhana, maka penggunaan variabel masihlah sedikit. Tetapi, di kemudian hari, bilamana class yang anda rancang agak rumit, dalam artian membutuhkan banyak variabel. Maka alangkah bijaknya bila anda bisa menyederhanakan situasi tersebut. Dan disinilah generic membuktikan hal tersebut. Dan pada kesempatan kali ini, saya akan merombak class Identitas. Perombakan pertama, saya mulai dari pembuatan Enumerator seperti berikut ini:
Private Enum IDKolom
    NamaDepan
    NamaBelakang
    TanggalLahir
End Enum
Setelah itu, yang saya lakukan adalah menghapus semua variabel yang telah saya buat. Mengingat variabel yang akan menggantikan sekaligus menangani semua hal cukup satu variabel saja. Dan variabel tersebut berjenis Dictionary. Class ini membutuhkan dua nilai/elemen agar bisa digunakan. Nilai/elemen pertama akan digunakan sebagai pemanggil. Sedangkan nilai/elemen kedua akan digunakan sebagai penampung nilai. Dan disini class Dictionary saya perlakukan/pergunakan sebagai berikut:
Dim variabel As New Dictionary(Of IDKolom, Object)
Dan seperti yang anda lihat pada penulisan kode diatas, enumerator IDKolom akan saya gunakan sebagai pemanggil oleh class Dictionary. Sedangkan nilai yang ditampung adalah berjenis objek, artinya, tipe data apapun bisa disimpan, termasuk nothing. Dan cara menggunakannya cukup gampang. Ketika class dictionary digunakan sebagai return value, maka cara menuliskannya/menggunakannya seperti gambar berikut ini:
[Image: open?id=14vW6-GbksuCE3R3YluwzqAY8QJ6JtDRK]
Dan seperti yang anda lihat pada gambar diatas. Dengan adanya Dictionary, saya bisa memberitahu variabel yang telah saya deklarasikan sekaligus digunakan untuk mengambil nilai berdasarkan id kolom yang dituju. Begitu pula ketika saya ingin mengsetting/menyimpan nilai, maka cara menggunakannya seperti berikut ini:
[Image: open?id=1u0OIebgqj4IlLgb9Vld-Iu7uOs5Lydhz]
Anda lihat sendiri, bukan? Inilah keenakan dari generic. Dalam area penulisan kode, generic sangatlah membantu. Tapi kalau untuk area Design View, generic tidak ada manfaatnya alias tidak bisa digunakan sama sekali. Sekalipun begitu, pahami kembali, Visual Basic .Net telah berubah total, dan penulisan kodelah yang membuktikan hal tersebut. Itulah sebabnya Visual Basic .Net bertolak belakang dengan Visual Basic, sekalipun banyak juga yang mengatakan Visual Basic dan Visual Basic .Net adalah sama. Padahal kalau mau dipikir kembali, dimana yah letak kesamaannya? Dan mengenai penulisan kode class Identitas saat ini adalah sebagai berikut:
Public Class Identitas
    Private Enum IDKolom
        NamaDepan
        NamaBelakang
        TanggalLahir
    End Enum
    Dim variabel As New Dictionary(Of IDKolom, Object)
    Property NamaDepan As String
        Get
            Return variabel(IDKolom.NamaDepan)
        End Get
        Set(ByVal value As String)
            variabel(IDKolom.NamaDepan) = value
        End Set
    End Property
    Property NamaBelakang As String
        Get
            Return variabel(IDKolom.NamaBelakang)
        End Get
        Set(ByVal value As String)
            variabel(IDKolom.NamaBelakang) = value
        End Set
    End Property
    Property TanggalLahir As DateTime
        Get
            Return variabel(IDKolom.TanggalLahir)
        End Get
        Set(ByVal value As DateTime)
            variabel(IDKolom.TanggalLahir) = value
        End Set
    End Property
    Sub New()
        MyBase.New()
        variabel(IDKolom.NamaDepan) = String.Empty
        variabel(IDKolom.NamaBelakang) = String.Empty
        variabel(IDKolom.TanggalLahir) = Nothing
    End Sub
    Sub New(ByVal NamaDepan As String, ByVal NamaBelakang As String)
        MyBase.New()
        variabel(IDKolom.NamaDepan) = NamaDepan
        variabel(IDKolom.NamaBelakang) = NamaBelakang
        variabel(IDKolom.TanggalLahir) = Nothing
    End Sub
    Sub New(ByVal NamaDepan As String, ByVal NamaBelakang As String, ByVal TanggalLahir As DateTime)
        MyBase.New()
        variabel(IDKolom.NamaDepan) = NamaDepan
        variabel(IDKolom.NamaBelakang) = NamaBelakang
        variabel(IDKolom.TanggalLahir) = TanggalLahir
    End Sub
End Class
Perlu anda ketahui, walaupun Dictionary sudah deklarasikan secara new, tetapi belum bisa digunakan sepenuhnya. Itu sebabnya pada constructor (maksud saya New) non parameter. Saya mengsetting masing-masing nilai. Sedangkan pada constructor yang menggunakan dua parameter, yaitu NamaDepan dan NamaBelakang, saya mengsetting nilai TanggaLahir menjadi nothing.

Lahirnya Lambda

Lambda mulai diperkenalkan oleh Microsoft pada .Net Framework 3.5, yang mana menyasar Visual Basic .Net 2008 alias Visual Basic 9 dan juga C# 2008. Kebanyakan (banyak sekali ternyata – red) para programmer Visual Basic .Net (dan juga C#, sayang sekali – red) mengenal Lambda sebagai LinQ alias Language-Integrated Query. Saya berkata demikian dikarenakan Lambda masuk ke kategori non tipe data, yang mana kalau di Visual Basic .Net biasa disebut sebagai VB$AnonymousType (saya kurang tahu kalau di C# ditulis/dikenal sebagai/seperti apa?). Ditambah lagi, satu hal yang membuat saya geleng-geleng kepala, gara-garanya saya harus mengubah konsep penulisan kode, sekalipun tidak baku tentunya. Hal ini saya tujukan kepada Lambda, dimana Lambda bisa digunakan untuk tabel data secara in-memory sekaligus virtual. Saya sebut virtual dikarenakan saya tidak perlu membuat/membangun sebuah class (ataupun structure) untuk membuat tabel data. Anda bingung? Atau mungkin tidak percaya? Kalau begitu akan saya perlihatkan kepada anda. Kali ini saya akan langsung membuat sebuah form guna membuktikan hal tersebut. Dan saya akan memulainya dari sini terlebih dahulu:
Public Class FormAnonymous
    Inherits Form
 
End Class
Dari sini, saya membangun sebuah function seperti berikut ini:
Private Function BuatIdentitas _
                    (ByVal NamaDepan As String, _
                     ByVal NamaBelakang As String, _
                     ByVal TanggalLahir As DateTime) As Object
        Return New With {.NamaDepan = NamaDepan, _
                         .NamaBelakang = NamaBelakang, _
                         .TanggalLahir = TanggalLahir}
End Function
Nah, inilah dia caranya membangun sebuah class tanpa class. Itulah maksud dari penulisan kode diatas. Cara kerja dari penulisan kode diatas adalah sebagai berikut:
·       Kata kunci New With bertugas/berfungsi untuk membangun/membuat sebuah class.
·       Nama kolom/property ditentukan dari titik, semisal .NamaDepan, itu adalah kolom/property.
·       Perlu anda ketahui, karena ini adalah virtual, maka ada baiknya anda menggunakan object sebagai return value-nya.
Dan sekarang, saya akan mendeklarasikan event load sekaligus menerapkan function BuatIdentitas. Penulisan kodenya adalah sebagai berikut ini:
Private Sub eLoad() Handles MyBase.Load
    Text = "Form Anonymous"
    Padding = New Padding(4)
    Size = New Size(300, 170)
 
    Dim al As New ArrayList
    al.Add(BuatIdentitas("Abu", "Anas", Nothing))
    al.Add(BuatIdentitas("Hengky", "Purnomo", Nothing))
    al.Add(BuatIdentitas("Wahyu", "Pratama", Nothing))
    Dim dgv As New DataGridView With {.Parent = Me, .Dock = DockStyle.Fill, .DataSource = al}
End Sub
Sekali lagi, dikarenakan return value dari function BuatIdentitas adalah anonymous, maka saya membutuhkan bantuan dari ArrayList sebagai perantaranya. Hal ini saya lakukan agar bisa di-binding ke Control Visual seperti DataGridView. Nantinya, ketika form anonymous anda jalankan, maka hasil yang akan anda dapatkan kurang lebih seperti berikut ini:
[Image: open?id=1eZun6Ct1iqEqP-lljetD2LZE7V01e7BS]
Jujur saja, ketika saya melihat sekaligus merasakan hasil yang saya dapati seperti pada gambar diatas. Kondisi saya saat itu adalah mulut saya menganga layaknya kuda nil lagi menganga. Harap maklumlah, karena saya tidak pernah merasakan kemudahan (fasilitas) seperti ini. Apalagi hal ini saya dapati dan rasakan dari Visual Basic .Net. dan untuk penulisan kode secara lengkap mengenai class form anonymous adalah sebagai berikut ini:
Public Class FormAnonymous
    Inherits Form
 
    Private Function BuatIdentitas _
                        (ByVal NamaDepan As String, _
                         ByVal NamaBelakang As String, _
                         ByVal TanggalLahir As DateTime) _
    As Object
        Return New With {.NamaDepan = NamaDepan, _
                         .NamaBelakang = NamaBelakang, _
                         .TanggalLahir = TanggalLahir}
    End Function
    Private Sub eLoad() Handles MyBase.Load
        Text = "Form Anonymous"
        Padding = New Padding(4)
        Size = New Size(300, 170)
 
        Dim al As New ArrayList
        al.Add(BuatIdentitas("Abu", "Anas", Nothing))
        al.Add(BuatIdentitas("Hengky", "Purnomo", Nothing))
        al.Add(BuatIdentitas("Wahyu", "Pratama", Nothing))
        Dim dgv As New DataGridView With {.Parent = Me, .Dock = DockStyle.Fill, .DataSource = al}
    End Sub
End Class

Lambda Merambah Ke Prosedur

Pada Visual Basic .Net 2010 alias Visual Basic 10 (dan juga C# 2010), Microsoft telah menaikkan derajat lambda. Dimana terhitung pada .Net Framework 4.0 hingga seterusnya, lambda bisa digunakan sebagai berikut:
·       Pengganti AddressOf, jadi anda bisa menyandingkan lambda ke AddHandler.
·       Menulis sebuah prosedur dan menyimpannya pada sebuah variabel.
·       Kian/semakin vitual.
Untuk contoh penutup kali ini, saya akan memperlihatkan kepada anda mengenai butir ketiga, yaitu lambda kian/semakin virtual. Langsung saja, dimana saya akan membuat sebuah form seperti berikut ini:
Public Class FormLambdaVirtual
    Inherits Form
 
End Class
Dari sini, saya langsung menuju event Load milik form, dan penulisan kodenya adalah sebagai berikut ini:
Private Sub eLoad() Handles MyBase.Load
    Text = "Form Lambda Virtual"
    Padding = New Padding(4)
    Size = New Size(300, 170)
 
    Dim db = _
        {New With {.NamaDepan = "Abu", .NamaBelakang = "Anas", .TanggalLahir = Nothing}, _
         New With {.NamaDepan = "Hengky", .NamaBelakang = "Purnomo", .TanggalLahir = Nothing}, _
         New With {.NamaDepan = "Wahyu", .NamaBelakang = "Pratama", .TanggalLahir = Nothing}}
 
    Dim dgv As New DataGridView With {.Parent = Me, .Dock = DockStyle.Fill, .DataSource = db}
End Sub
Nah, seperti yang anda lihat pada penulisan kode diatas, tepatnya pada pendeklarasian variabel db, dimana saya langsung mendeklarasikan class Identitas secara virtual. Dan yang paling menyenangkan lagi adalah, variabel tersebut dikenal oleh Control Visual DataGridView. Sebagai buktinya, bila form lambda virtual anda jalankan, maka hasil yang akan anda dapatkan adalah sebagai berikut ini:
[Image: open?id=1Sche6QSFSnQKW6b7LWSoRpmNOsWf_uep]
Nah, inilah hasil yang akan anda dapatkan, kira-kira seperti itulah, hahaha. Dan lagi-lagi mulut saya dibuat menganga layaknya kuda nil menganga untuk kedua kalinya, hahaha. Dan mengenai penulisan kode secara lengkap mengenai form lambda virtual adalah sebagai berikut ini:
Public Class FormLambdaVirtual
    Inherits Form
 
    Private Sub eLoad() Handles MyBase.Load
        Text = "Form Lambda Virtual"
        Padding = New Padding(4)
        Size = New Size(300, 170)
 
        Dim db = _
            {New With {.NamaDepan = "Abu", .NamaBelakang = "Anas", .TanggalLahir = Nothing}, _
             New With {.NamaDepan = "Hengky", .NamaBelakang = "Purnomo", .TanggalLahir = Nothing}, _
             New With {.NamaDepan = "Wahyu", .NamaBelakang = "Pratama", .TanggalLahir = Nothing}}
 
        Dim dgv As New DataGridView With {.Parent = Me, .Dock = DockStyle.Fill, .DataSource = db}
    End Sub
End Class

Penutup

Pada postingan pertama saya ini, saya telah memperlihatkan kepada anda mengenai apa itu Visual Basic .Net bilamana ditinjau dari sudut penulisan kode. Baik dari versi terawal hingga versi 2010. Disini saya hanya ingin memperlihatkan kepada anda, bahwa bahasa pemrograman yang baik biasanya bisa terlihat dari beberapa hal sebagai berikut:
  • Fondasi yang digunakan/berlaku.
  • Penulisan kode. Disini, penulisan kode merujuk kepada hak kuasa beserta jangkauan yang bisa dicapai. Pada Visual Basic (terhitung dari versi 1 hingga 6), penulisan kode yang dimilikinya sangatlah lemah. Dan bahkan kalau harus berhubungan dengan low level area, mau tidak mau harus mengandalkan API alias Application Programming Interface. Dan inilah yang selalu membuat saya merasa jijik dan muak semasa menjadi programmer Visual Basic (hitungan versi 4 hingga 6), dikarenakan terlalu banyak yang tidak bisa dilakukan oleh Visual Basic. Harap maklumlah, Visual Basic memang tidak dirancang untuk menghadapi situasi yang rumit. Itulah yang membuat saya merasa kalau Visual Basic bisa disebut sebagai anak tiri didalam lingkungan keluarga besar Visual Studio. Tetapi di kemudian hari penilaian saya tersebut berubah takala Visual Basic telah berevolusi menjadi Visual Basic .Net. Sekalipun sebetulnya tetap saja ada yang namanya pembatasan hak kuasa pada wilayah tertentu, hahahaha, hiks.
  • Sumber daya yang tersedia dan juga boleh digunakan/dipakai, dan bahkan bisa/boleh dikembangkan.
Nah, itulah dia yang namanya Visual Basic .Net di mata saya. Dan itulah yang membuat saya betah/kerasan menjalani kehidupan sebagai programmer Visual Basic .Net.

Tentang Penulis

Seseorang yang sedang dalam masa peralihan. Dan sedang mencoba menjalani kehidupan sebagai penulis, alasannya pun sebagai berikut:
  • Ikatlah ilmu dengan menuliskannya.
  • Setelah sekian lama bertapa, akhirnya menyadarinya, bila bahasa adalah bentuk lain dari ungkapan. Maka seharusnya semua ilmu adalah turunan bahasa. Karena yang namanya ilmu digunakan untuk mengungkap sekaligus memperjelas suatu kejadian dengan caranya tersendiri.
  • Berharap semoga manusia Indonesia mau/senang/gemar membaca. Dan bahkan lebih dari itu, bisa menghormati teori (panduan).
Sampai jumpa lagi di lain postingan.
Reply
#2
Thumbs Up 
Mantap om... Smile Smile Smile
Reply
#3
Keren om, ditunggu postingan berikutnya  Smile
Reply
#4
ikut nyimak
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)