Monday, December 10, 2012

VB6 Code - Memahami KeyWord ByVal dan ByRef

Di bawah ini merupakan contoh kode sehingga kita bisa memahami KeyWord ByVal dan ByRef. Untuk keperluan ini copy dan pastekan kode di bawah ini:

Option Explicit

Private Sub Form_Load()
Dim iNumber As Integer
iNumber = 1
MsgBox TampilkanPesan(iNumber)
End Sub

Function TampilkanPesan(ByVal Pesan As String) As String
TampilkanPesan = Pesan
End Function
Coba bedakan dengan yang ini
Fungsinya akan menampilkan error yakni argumen yang tidak sama (cocok/mismatch)
Private Sub Form_Load()
Dim iNumber As Integer
iNumber = 1
MsgBox TampilkanPesan(iNumber)
End Sub

Function TampilkanPesan(Pesan As String) As String
TampilkanPesan = Pesan
End Function
Untuk mengatasi error di atas maka cocokan saja argumennya yakni
dengan mengubah variable iNumber yang asalnya integer menjadi String
Private Sub Form_Load()
Dim iNumber As String
iNumber = 1
'sekarang tidak akan terjadi error karena type datanya sama yakni string
MsgBox TampilkanPesan(iNumber)
End Sub

Function TampilkanPesan(Pesan As String) As String
TampilkanPesan = Pesan
End Function
Atau Anda beri statement ByVal pada argumen fungsinya
Private Sub Form_Load()
'Dim iNumber As String
iNumber = 1
'sekarang tidak akan terjadi error karena type datanya sama yakni string
MsgBox TampilkanPesan(iNumber)
End Sub

Function TampilkanPesan(ByVal Pesan As String) As String
TampilkanPesan = Pesan
End Function
Maka kesimpulannya:
  • Secara default Visual Basic 6.0 telah menyertakan ByRef pada argumen walaupun kita tidak menuliskannya, terkecuali secara explicit kita menuliskan ByVal pada argumen tersebut.
  • Penggunaan ByVal akan memaksa sebuah argumen untuk dijadikan data type tertentu sebagai contoh:
  • ByVal Pesan As String maka pesan akan dipaksa untuk memiliki data type string.
  • Penggunaan KeyWord ByVal menjadikan sebuah argumen tidak lagi memiliki hubungan dengan variable yang melewatinya. Sebagai contoh:
    Dim i as integer
i = 1
Msgbox TampilkanPesan(i)
Msgbox i 'maka i disini, tetap saja memiliki nilai satu.

Function TampilkanPesan(ByVal Pesan As String) As String
Pesan = 2
TampilkanPesan = Pesan
End Function
READ MORE - VB6 Code - Memahami KeyWord ByVal dan ByRef

VB6 Code - Memahami ParamArray Pada Sebuah Argumen

Untuk Memahami ParamArray dalam Visual Basic 6.0, Coba copy dan pastekan kode di bawah ini:
Option Explicit

Private Sub Form_Load()
MsgBox TampilkanPesan("Pesan 1", "Pesan 2", "Pesan 3", "Pesan dst")
End Sub

Function TampilkanPesan(ParamArray Pesan() As Variant)
TampilkanPesan = Pesan(1) & " dan " & Pesan(2) & " dan " & Pesan(3)
End Function
Bagaimana? Sukses! Selanjutnya hilangkan ParamArray, sehingga kodenya menjadi:
Option Explicit

Private Sub Form_Load()
MsgBox TampilkanPesan("Pesan 1", "Pesan 2", "Pesan 3", "Pesan dst")
End Sub

Function TampilkanPesan(Pesan() As Variant)
TampilkanPesan = Pesan(1) & " dan " & Pesan(2) & " dan " & Pesan(3)
End Function
Bagaimana? Error!

Maka kesimpulannya:
Dengan menggunakan ParamArray maka argumen dari sebuah fungsi dapat menampung beberapa/banyak data atau katakanlah berubah menjadi array. Tetapi harus diingat aturan dari ParamArray ini, yaitu:

  1. Harus berType Data Variant.
  2. Jika Argumen lebih dari satu, maka ParamArray wajib ditempatkan di akhir.
  3. Hanya satu ParamArray yang diperbolehkan dalam sebuah fungsi.

Nah, sekarang Anda telah memahami ParamArray dalam Visual Basic 6.0.
READ MORE - VB6 Code - Memahami ParamArray Pada Sebuah Argumen

VB6 - Memahami KeyWord Optional Pada Sebuah Argumen

Untuk memahami Optional pada sebuah argumen, copy dan pastekan kode berikut:
Option Explicit

Private Sub Form_Load()
MsgBox TampilkanPesan("Pesan pertama")
End Sub

Private Function TampilkanPesan(PesanPertama As String, PesanKedua As String)
TampilkanPesan = PesanPertama & " dan " & PesanKedua
End Function
Apa yang terjadi? Error! mengapa? karena argumen yang kedua tidak bersifat optional, sehingga mau tidak mau kita harus mengisinya. Selanjutnya copy dan pastekan kode berikut:
Option Explicit

Private Sub Form_Load()
MsgBox TampilkanPesan("Pesan pertama")
End Sub

Private Function TampilkanPesan(PesanPertama As String, Option PesanKedua As String)
TampilkanPesan = PesanPertama & " dan " & PesanKedua
End Function
Apa yang terjadi, Sukses! tidak menampilkan pesan error. Selanjutnya copy dan pastekan kode berikut:
Option Explicit

Private Sub Form_Load()
MsgBox TampilkanPesan("Pesan pertama")
End Sub

Private Function TampilkanPesan(PesanPertama As String, Option PesanKedua As String="Pesan kedua")
TampilkanPesan = PesanPertama & " dan " & PesanKedua
End Function
Apa yang terjadi, Sukses! tidak menampilkan pesan error!

Maka kesimpulannya:
Sebuah argumen yang disertai Optional memiliki dua pilihan: boleh diisi atau tidak.
READ MORE - VB6 - Memahami KeyWord Optional Pada Sebuah Argumen

VB6 Code - Memahami Recursive Function (Fungsi Recursive)

Di bawah ini merupakan contoh kode sehingga kita dapat memahami fungsi recursive. Apa yang dimaksud dengan fungsi recursive? fungsi recursive adalah fungsi yang memanggil dirinya sendiri. Coba perhatikan contoh kode di bawah ini:
Private Sub Form_Load()
MsgBox Factorial(9)
End Sub

Function Factorial (ByVal MyVar As Integer) ' Function declaration.
MyVar = MyVar - 1
If MyVar = 0 Then
Factorial = 1
Exit Function
End If
Factorial = Factorial(MyVar) * (MyVar + 1)
End Function
Dalam contoh kode di atas, fungsi tersebut memanggil dirinya sendiri (yang diberi warna merah).Untuk keperluan fungsi recursive ada beberapa hal yang harus diperhatikan, yaitu: Pemberian KeyWord ByVal (coba Anda hilangkan ByVal maka apa yang terjadi?) Fungsi recursive harus ditutup/diakhiri jika tidak, maka fungsi tersebut akan menampilkan error yakni Runtime Error '28' Out Of Stack Space. Mengapa? karena fungsi tersebut terus menerus memanggil fungsinya tanpa memiliki akhir, kapan ia harus berhenti. Sebagai contoh kode yang error, copy dan pastekan code berikut:
Private Sub Form_Load()
MsgBox Factorial(9)
End Sub

Function Factorial(ByVal MyVar As Integer) ' Function declaration.
MyVar = MyVar - 1
If MyVar = 0 Then
Factorial = 1
End If
Factorial = Factorial(MyVar) * (MyVar + 1)
End Function
Kode di atas akan mengalami error, mengapa? karena kode tersebut tidak memiliki akhir (terus menerus memanggil dirinya sendiri). Seperti halnya kalimat di bawah ini: Jika sekolah maka libur, dan jika libur maka sekolah. Lho? kapan sekolah dan kapan liburnya!
READ MORE - VB6 Code - Memahami Recursive Function (Fungsi Recursive)