.NET – Generic Type

Banyak contoh mengenai Generic ini di .NET. Kebanyakan tipe generic ini bisa ditemukan di namespace System.Collections.Generic. Salah satu contoh nya adalah List(Of T) dimana T merupakan parameter bebas yang harus kita definisikan tipenya.

Contoh Dim data as New List(Of String) –> data menyimpan informasi bertipe string
Dim data as New List(of Date) –> data menyimpan informasi bertipe Date

Kenapa menggunakan Generic?

  1. Tipe jelas, dari contoh diatas jelas bahwa hanya data dengan tipe yang sesuai dengan definisi yang bisa ditampung
  2. Lebih efisien. Karena generic class hanya memanipulasi data bertipe spesific, maka program tidak mengkonversi data menjadi bertipe object. Sehingga performanya lebih bagus.
  3. Kita bisa menggunakan satu generic class untuk memproses berbagai macam tipe data.

Generic Method

Contoh berikut adalah method untuk menukar nilai val1 dan val2

Private Sub TukarNilai(ByVal val1 As Integer, ByVal val2 As Integer)
   Dim temp As Integer
   temp = val1
   val1 = val2
   val2 = temp
End Sub

method ini berjalan jika data yang ingin kita tukar nilainya adalah integer, lalu bagaimana jika data yang ingin ditukar bertipe string? Jelas akan terjadi error. Salah satu cara mengatasi data bertipe string anda harus membuat satu method lagi seperti berikut

Private Sub TukarNilai(ByVal val1 As String, ByVal val2 As String)
   Dim temp As String
   temp = val1
   val1 = val2
   val2 = temp
End Sub

Jadi anda akan mempunyai 2 method untuk menukar data bertipe integer dan string. Bagaimana jika data yang akan diproses tidak hanya integer dan string? Berarti kita harus membuat method yang serupa berkali-kali sesuai kebutuhan. Ini jelas tidak efisien dan akan menyulitkan seandainya ada perubahan kode, karena harus mengedit beberapa method.

Untuk kasus seperti inilah kita perlu membuat method bertipe generic. Dengan method generic, kita tidak perlu membuat method yang sama berulang-ulang. Cukup satu method, berbagai tipe data dapat diproses.

Private Sub TukarNilai(Of T)(ByVal val1 As T, ByVal val2 As T)
   Dim temp As T
   temp = val1
   val1 = val2
   val2 = temp
End Sub

Penerapan:
Untuk memanggil method generic diatas, kita harus mendefinisikan tipe dari parameter T.

TukarNilai(Of String)("ABC", "DEF")
TukarNilai(Of Integer)(123, 234)

Collection
Untuk collection, List(Of T) merupakan tipe generic, dibandingkan ArrayList, performa List lebih cepat. Karena tipe data yang tersimpan di List sudah jelas, maka tidak ada proses boxing di dalamnya. Sedangkan Arraylist didesain untuk menyimpan data object, sehingga semua nilai yang dimasukkan dalam arraylist akan dikonversi terlebih dahulu menjadi objek. Integer atau string bukanlah objek, jadi sebelum disimpan dalam arraylist, data akan melalui proses yang disebut boxing yang mengkonversi integer atau string menjadi object. Berikut contoh penghitungan performa dari arraylist dan list ketika memproses 5 juta data, dihitung dalam milisecond.

Module Module1
    Sub Main()
        Dim perulangan As Integer = 5000000
        Dim waktu As New Stopwatch

        Dim arrlist As New ArrayList
        Stopwatch.StartNew()
        waktu.Start()
        For i As Integer = 0 To perulangan
            arrlist.Add(i)
        Next
        waktu.Stop()
        Dim waktuArrayList As String = waktu.Elapsed.Milliseconds.ToString()
        Console.Write("Waktu proses ArrayList: " & waktuArrayList & vbCrLf)

        '---- list(Of Integer)
        Dim lst As New List(Of Integer)
        waktu.Reset()
        waktu.Start()
        For i As Integer = 0 To perulangan
            lst.Add(i)
        Next
        waktu.Stop()
        Dim waktulist As String = waktu.Elapsed.Milliseconds.ToString()
        Console.Write("Waktu proses List: " & waktulist)

        Console.ReadKey()
    End Sub
End Module

Hasilnya bervariasi tergantung pada jenis PC. List jauh lebih cepat prosesnya daripada ArrayList.

Generic Class
Selain diterapkan di method dan collection, generic juga bisa diterapkan di Class
Contoh:

Public Class ClassGeneric(Of type1, type2, type3)
Private value1 As type1
Private value2 As type2
Private value3 As type3

Public Sub ContohSub(ByVal x As type1, ByVal y As type2)
'proses di sub
End Sub

Public Property ContohProp() As type3
Get
Return value3
End Get
Set(ByVal value As type3)
value3 = value
End Set
End Property
End Class

Masih banyak hal yang perlu di pelajari mengenai Generic ini. Karena untuk kasus-kasus tertentu generic ini lebih rumit dari kelihatannya😦

Salam, Semoga bermanfaat.

About Yuniar

Penulis sekarang lebih banyak bekerja menggunakan teknologi Microsoft .NET secara umum dan TIDAK lagi menggunakan aplikasi MapXtreme.net dari MapInfo. Karena itu mohon maaf, jika pertanyaan-pertanyaan mengenai MapXtreme sudah tidak bisa saya jawab lagi.

Posted on 22 Desember 2009, in .NET and tagged , , . Bookmark the permalink. Tinggalkan komentar.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: