Tidak semua variabel diciptakan sama.
Variabel-variabel yang sudah pasti, akan ada selama aplikasi dijalankan, dan
yang lainnya dibuat dan dihancurkan ribuan kali setiap detik. Sebuah variabel
dapat kelihatan hanya dari sebuah prosedur atau sebuah modul, atau dapat ada
hanya selama waktu ketika suatu jendela di aplikasi dijalankan. Untuk lebih
jelasnya, ada dua definisi formal mengenai suatu variabel yang akan dibahas
berikut ini
·
Ruang lingkup dari
sebuah variabel, adalah porsi dari code di mana variabel tersebut dapat
diakses. Sebagai contoh, sebuah variabel dideklarasikan dengan kata Public di sebuah module (.bas), akan kelihatan, dan oleh
karena itu dapat dibaca dan ditulis dari manapun di aplikasi Anda. Sementara
jika variabel dideklarasikan dengan menggunakan kata Private variabel tersebut hanya dapat diakses dari module itu
sendiri.
·
Usia dari sebuah
variabel, adalah suatu waktu selama variabel tersebut dapat bertahan di program
dan menggunakan memory. Usia dari variabel yang dideklarasikan dengan kata Public bisa berlaku selama aplikasi dijalankan, tapi umumnya
hal ini tidak selalu seperti itu. Sebagai contoh, sebuah variabel lokal yang
dideklarasikan sebagai Dynamic dalam sebuah prosedur akan diciptakan setiap kali
Visual Basic mengeksekusi prosedur tersebut dan akan dihancurkan ketika
prosedur tersebut telah selesai dieksekusi.
Berikut akan kita bahas jenis-jenis variabel
dilihat dari level variabel yang bertalian
Variabel Global
Dalam Visual Basic, variabel global adalah
variabel yang dideklarasikan dengan menggunakan kata kunci Public di module (.bas). Secara konsep, variabel tersebut
adalah yang paling sederhana dari seluruhnya, karena dapat bertahan selama
aplikasi dijalankan, dan ruang lingkup mereka berada di seluruh aplikasi.
(Dengan kata lain, mereka dapat dibaca dan dimodifikasi dari manapun di dalam
program tersebut). Potongan coding berikut menunjukkan pendeklarasian sebuah
variabel global:
Code::
|
'Dalam sebuah module (.bas)
Public InvoiceCount as Long 'Ini adalah sebuah variabel global.
|
Visual Basic 6 masih mendukung kata kunci Global seperti yang berlaku pada Visual Basic 3 dan versi
sebelumnya, tapi Microsoft tidak menganjurkan untuk menggunakannya.
Secara umum, tidak disarankan untuk
menggunakan terlalu banyak variabel global. Jika memungkinkan, Anda seharusnya
membatasi untuk menggunakan pada tingkat module atau variabel lokal, karena mereka
membolehkan menggunakan coding secara lebih mudah. Jika module dan prosedur
Anda menggunakan variabel global untuk menghubungkan di antara keduanya, Anda
tidak dapat menggunakan kembali coding tanpa juga meng-copy definisi
dari variabel global yang terlibat. Secara praktis, walaupun, hal ini sering
tidak mungkin untuk membangun sebuah aplikasi tanpa menggunakan variabel
global, Anda dianjurkan untuk menggunakan cara berikut: Gunakan mereka dengan
hemat dan pilih nama yang memberi tanda bahwa ruang lingkup mereka dengan jelas
(sebagai contoh, gunakan sebuah awalan g_ atau glo). Walaupun penting juga
untuk menambahkan komentar di mana variabel tersebut berada dan mana saja yang
digunakan atau dimodifikasi di setiap prosedur:
Code::
|
'Catatan: Prosedur ini tergantung pada variabel global berikut:
' g_InvoiceCount : Jumlah tagihan (dapat dibaca dan dimodifikasi) ' g_UserName : Nama user yang aktif (hanya dapat dibaca) Sub CreateNewInvoice()
...
End Sub
|
Ada sebuah alternatif, di mana saya sering memakainya
dengan berguna, yaitu mendefinisikan sebuah struktur khusus GlobalUDT yang
merangkum semua variabel global dari aplikasi dengan mendeklarasikan sebuah
variabel global yang bertipe GlobalUDT dalam sebuah module (.bas):
Code::
|
'Dalam sebuah module (.bas):
Public Type GlobalUDT
InvoiceCount As Long
UserName As String
....
End Type
Public glo As GlobalUDT
|
Anda dapat mengakses variabel-variabel global
tersebut dengan menggunakan sebuah cara yang sangat sederhana, jelas, dan
menghilangkan sintaks yang salah:
Code::
|
'Dari bagian manapun di aplikasi Anda
'Ketika Anda mengetik "glo." maka akan muncul nama-nama variabel InvoiceCount, UserName,
'dan seterusnya jika ada yang Anda deklarasikan lagi dalam GlobalUDT tersebut.
glo.InvoiceCount = glo.InvoiceCount + 1
|
Teknik ini mempunyai banyak keuntungan.
Pertama, ruang lingkup variabel ditandai/dikenal dari namanya. Kemudian jika
Anda tidak mengingat nama dari variabel Anda, Anda hanya mengetik tiga karakter
pertama "glo", lalu ketik karakter titik (".") dan biarkan
Microsoft untuk menampilkan daftar dari semua komponen variabel glo tersebut.
Dalam banyak kasus, Anda hanya mengetik beberapa karakter dan membiarkan Visual
Basic melengkapi nama variabel untuk Anda. Dapat menghemat waktu dengan luar
biasa. Keuntungan yang ketiga adalah Anda dapat dengan mudah menyimpan semua
variabel global ke dalam sebuah file:
Code::
|
'Prosedur yang sama dapat menyimpan dan mengambil data global di glo.
Sub SaveLoadGlobalData(filename As String, Save As Boolean)
Dim filenum As Integer, isOpen As Boolean
On Error Goto Error_Handler
filenum = FreeFile
Open filename For Binary As filenum
isOpen = True
If Save Then
Put #filenum, , glo Else
Get #filenum, , glo
End If
Error_Handler:
If isOpen Then Close #filenum
End Sub
|
Keuntungan lainnya adalah Anda dapat menambah
atau menghapus variabel global yang sesungguhnya, komponen dari struktur
GlobalUDT, tanpa harus memodifikasi prosedur SaveLoadGlobalData. (Tentu saja,
Anda tidak dapat mengambil data secara benar dengan sebuah versi yang berbeda
dari GlobalUDT)
Variabel Level Module
Jika Anda mendeklarasikan sebuah variabel
menggunakan kata kunci Private atau dengan menggunakan Dim pada
bagian paling atas (bagian deklarasi) pada sebuah module (.bas), sebuah module
form, sebuah class module, dan sebagainya, Anda membuat sebuah variabel
dengan level module. Variabel seperti ini kelihatan hanya dari module di mana
mereka berada dan tidak dapat diakses dari luar. Secara umum, variabel-variabel
ini dapat digunakan bagi setiap prosedur yang berada dalam module yang sama.
Code::
|
'Di bagian deklarasi (paling atas) dari setiap module apapun
'(module, form, class module, dll)
Private LoginTime As Date 'Sebuah variabel private pada level module Dim LoginPassword As String 'Variabel private lainnya pada level module
|
Anda dapat juga menggunakan kata kunci Public untuk variabel pada level module, untuk semua tipe
module kecuali module bas. (Variabel Public di
module .bas merupakan variabel yang bertipe global). Dalam hal ini, Anda
membuat suatu terobosan: Sebuah variabel Public pada
tingkat module, yang dapat diakses oleh semua prosedur dalam module untuk
membagi/memberikan data dan juga dapat diakses dari luar module tersebut. Dalam
hal ini, biar bagaimanapun, hal ini lebih pantas untuk mendeskripsikan sebuah
variabel sebagai property:
Code::
|
'Di bagian deklarasi dalam module Form1
Public CustomerName As String 'Sebuah property Public
|
Anda dapat mengakses sebuah property module
sebagai variabel regular dari dalam module dan sebagai property custom dari
luar:
Code::
|
'Dari luar module Form1...
Form1.CustomerName = "John Smith"
|
Usia dari sebuah variabel level module
bersamaan dengan usia dari module itu sendiri. Variabel Private dalam standar
module (.bas) bertahan selama usia dari aplikasi, walaupun jika mereka dapat
diakses hanya ketika Visual Basic sedang mengeksekusi coding di module itu.
Variabel-variabel di dalam form dan class module ada hanya ketika module
tersebut diload ke memory. Dengan kata lain, sementara sebuah form aktif (tapi
tidak perlu harus kelihatan kepada user), semua variabel yang ada dalam form
tersebut membutuhkan memory, dan memory ini dibebaskan kembali hanya ketika
form tersebut benar-benar di-unload dari memory. Ketika waktu berikutnya
form dibuat, Visual Basic mengalokasi kembali memory untuk semua variabel
tersebut dan mengeset nilai mereka ke nilai default masing-masing (nol (0)
untuk nilai numeric, string kosong ("") untuk strings, Nothing untuk
variabel object).
Variabel Dynamic Local
Variabel Dynamic local
didefinisikan di dalam sebuah prosedur; ruang lingkup mereka adalah prosedur
itu sendiri, dan usia mereka selama/bersamaan dengan usia prosedur itu:
Code::
|
Sub PrintInvoice()
Dim text As String 'Ini variabel dynamic local. ...
End Sub
|
Setiap kali prosedur tersebut dieksekusi,
sebuah variabel Dynamic dibuat kembali dan diinisialisasi ke nilai default-nya
(0, string kosong, atau Nothing). Ketika prosedur ini telah selesai, memory di
stack dialokasi oleh Visual Basic untuk variabel yang dibebaskan. Variabel
Lokal membuatnya mungkin digunakan kembali pada level prosedur. Jika sebuah
prosedur mempunyai referensi hanya parameternya dan variabel local miliknya
(berpindah tidak antar variabel global maupun variabel level module), dia dapat
"dipotong" dari satu aplikasi dan dipastekan ke aplikasi lainnya
tanpa adanya masalah kebergantungan apapun.
Variabel Static Local
Variabel static local merupakan suatu
pengembangan karena ruang lingkupnya lokal dan usianya sama dengan variabel
tingkat module. Nilai mereka disediakan antara pemanggilan prosedur di mana
mereka berada sampai module milik variabel ini di-unload dari memory
(atau sampai aplikasi berakhir, sama seperti kasus untuk prosedur yang berada
di dalam module standar (.bas)). Variabel-variabel ini dideklarasikan di dalam
sebuah prosedur dengan menggunakan kata kunci Static:
Code::
|
Sub PrintInvoice()
Static InProgress As Boolean 'Ini adalah variabel Static local. ...
End Sub
|
Alternatif untuk variabel Static, Anda dapat
mendeklarasikan suatu prosedur menjadi Static, di mana dalam hal ini, semua
variabel yang dideklarasikan di dalam prosedur tersebut akan menjadi Static:
Code::
|
Static Sub PrintInvoice()
Dim InProgress As Boolean 'Ini adalah sebuah variabel Static local. ...
End Sub
|
Variabel Static local sama dengan variabel
private pada tingkat module, di mana Anda dapat memindahkan sebuah deklarasi
Static dari dalam sebuah prosedur ke bagian deklarasi dari module (Anda hanya
mengubah kata Static menjadi Dim, karena Static tidak diperbolehkan
dideklarasikan di luar dari prosedur), dan prosedur akan melanjutkan tugas
seperti sebelumnya. Secara umum, Anda tidak dapat selalu melakukan lawannya,
yaitu: Mengganti sebuah variabel di level module menjadi sebuah variabel Static
di level prosedur. Berhasil jika variabel tersebut direferensikan (dihubungkan)
hanya di dalam prosedur itu. Dalam hal ini, sebuah variabel Static local
merupakan sebuah variabel di level module yang tidak dibutuhkan untuk digunakan
oleh prosedur lainnya. Dengan menjaga deklarasi variabel di dalam batas
prosedur, Anda dapat menggunakan kembali coding prosedur secara lebih mudah.
Variabel Static sering sekali berguna untuk
mencegah suatu prosedur dari pemasukan data secara berulang. Hal ini sering
sekali berguna untuk event prosedur, sebagai contoh, Anda tidak ingin memproses
klik dari user dari tombol yang sama sampai event klik sebelumnya telah selesai
dikerjakan, seperti yang ditunjukkan pada coding di bawah:
Code::
|
Private Sub cmdSearch_Click()
Static InProgress As Boolean
'Keluar dari prosedur jika ada panggilan ketika proses berlangsung.
If InProgress Then MsgBox "Maaf, coba lain kali": Exit Sub
InProgress = True
'Lakukan pencarian di sini.
... 'Kemudian enable-kan kembali panggilan sebelum keluar dari prosedur ini.
InProgress = False
End Sub
|
Sumber: E-book Programming Microsoft Visual Basic 6.0 (Scope and Lifetime of
Variables)
0 komentar:
Posting Komentar