Masa pakai di Visual Basic
Masa pakai elemen yang dideklarasikan adalah periode waktu yang tersedia untuk digunakan. Variabel adalah satu-satunya elemen yang memiliki masa pakai. Untuk tujuan ini, kompiler memperlakukan parameter prosedur dan pengembalian fungsi sebagai kasus variabel khusus. Masa pakai variabel mewakili periode waktu di mana ia dapat menyimpan nilai. Nilainya dapat berubah selama masa pakainya, tetapi selalu memiliki beberapa nilai.
Masa Pakai yang Berbeda
Variabel anggota (dideklarasikan pada tingkat modul, di luar prosedur apa pun) biasanya memiliki masa pakai yang sama dengan elemen tempat ia dinyatakan. Variabel yang tidak dibagikan yang dideklarasikan dalam kelas atau struktur ada sebagai salinan terpisah untuk setiap instans kelas atau struktur tempat ia dideklarasikan. Setiap variabel tersebut memiliki masa pakai yang sama dengan instansnya. Namun, variabel Shared
hanya memiliki satu masa pakai, yang berlangsung selama seluruh aplikasi Anda berjalan.
Variabel lokal (dideklarasikan di dalam prosedur) hanya ada saat prosedur tempat variabel tersebut dinyatakan berjalan. Ini juga berlaku untuk parameter prosedur tersebut dan untuk pengembalian fungsi apa pun. Namun, jika prosedur tersebut memanggil prosedur lain, variabel lokal mempertahankan nilainya saat prosedur yang disebut berjalan.
Awal Masa Pakai
Masa pakai variabel lokal dimulai ketika kontrol memasuki prosedur tempat ia dinyatakan. Setiap variabel lokal diinsialisasi ke nilai default untuk jenis datanya segera setelah prosedur mulai berjalan. Ketika prosedur menemukan pernyataan Dim
yang menentukan nilai awal, prosedur menetapkan variabel tersebut ke nilai tersebut, bahkan jika kode Anda telah menetapkan nilai lain untuknya.
Setiap anggota variabel struktur diinsialisasi seolah-olah itu adalah variabel yang terpisah. Demikian pula, setiap elemen dari variabel array diinsialisasi secara individual.
Variabel yang dideklarasikan dalam blok di dalam prosedur (seperti perulangan For
) diinisialisasi pada entri ke prosedur. Inisialisasi ini berlaku baik kode Anda pernah mengeksekusi blok atau tidak.
Akhir Masa Pakai
Ketika prosedur berakhir, nilai-nilai variabel lokalnya tidak dipertahankan, dan Visual Basic mendapatkan kembali memori mereka. Ketika Anda memanggil prosedur di lain waktu, semua variabel lokalnya dibuat lagi dan dimasukkan kembali.
Ketika sebuah instans dari kelas atau struktur berakhir, variabel yang tidak dibagikan kehilangan memori dan nilai-nilainya. Setiap instans baru dari kelas atau struktur menciptakan dan menginisialisasi ulang variabel yang tidak dibagikan. Namun, variabel Shared
dipertahankan sampai aplikasi Anda berhenti berjalan.
Perpanjangan Masa Pakai
Jika Anda mendeklarasikan variabel lokal dengan kata kunci Static
, masa pakainya lebih lama dari waktu eksekusi prosedurnya. Tabel berikut ini memperlihatkan bagaimana deklarasi prosedur menentukan berapa lama variabel Static
ada.
Lokasi prosedur dan berbagi | Masa pakai variabel statis dimulai | Masa pakai variabel statis berakhir |
---|---|---|
Dalam modul (dibagikan secara default) | Pertama kali prosedur ini disebut | Ketika aplikasi Anda berhenti berjalan |
Di kelas, Shared (prosedur bukan anggota instans) |
Pertama kali prosedur ini disebut baik pada instans tertentu atau pada nama kelas atau struktur itu sendiri | Ketika aplikasi Anda berhenti berjalan |
Dalam instans kelas, bukan Shared (prosedur adalah anggota instans) |
Pertama kali prosedur dipanggil pada instans tertentu | Ketika instans dirilis untuk pengumpulan sampah (GC) |
Variabel Statis Dengan Nama yang Sama
Anda dapat mendeklarasikan variabel statis dengan nama yang sama di lebih dari satu prosedur. Jika Anda melakukan ini, kompiler Visual Basic menganggap setiap variabel tersebut sebagai elemen terpisah. Inisialisasi salah satu variabel ini tidak mempengaruhi nilai yang lain. Hal yang sama berlaku jika Anda menentukan prosedur dengan satu set kelebihan beban dan mendeklarasikan variabel statis dengan nama yang sama di setiap kelebihan beban.
Berisi Elemen untuk Variabel Statis
Anda dapat mendeklarasikan variabel lokal statis dalam kelas, yaitu, dalam prosedur di kelas itu. Namun, Anda tidak dapat mendeklarasikan variabel lokal statis dalam struktur, baik sebagai anggota struktur atau sebagai variabel lokal dari prosedur dalam struktur itu.
Contoh
Deskripsi
Contoh berikut mendeklarasikan variabel dengan kata kunci Static. (Perhatikan bahwa Anda tidak memerlukan kata kunci Dim
saat Pernyataan Dim menggunakan pengubah seperti Static
.)
Kode
Function runningTotal(ByVal num As Integer) As Integer
Static applesSold As Integer
applesSold = applesSold + num
Return applesSold
End Function
Komentar
Dalam contoh sebelumnya, variabel applesSold
terus ada setelah prosedur runningTotal
kembali ke kode panggilan. Ketika Anda memanggil runningTotal
di lain waktu, applesSold
mempertahankan nilai yang dihitung sebelumnya.
Jika applesSold
telah dinyatakan tanpa menggunakan Static
, nilai akumulasi sebelumnya tidak akan dipertahankan di seluruh panggilan ke runningTotal
. Ketika Anda memanggil runningTotal
di lain waktu, applesSold
akan dibuat ulang dan diinisialisasi menjadi 0, dan runningTotal
hanya akan mengembalikan nilai yang sama dengan yang dipanggil.
Mengkompilasi kode
Anda dapat menginisialisasi nilai variabel lokal statis sebagai bagian dari deklarasinya. Jika Anda mendeklarasikan array menjadi Static
, Anda dapat menginisialisasi peringkatnya (jumlah dimensi), panjang setiap dimensi, dan nilai elemen individual.
Keamanan
Dalam contoh sebelumnya, Anda dapat menghasilkan masa pakai yang sama dengan mendeklarasikan applesSold
pada tingkat modul. Namun, jika Anda mengubah cakupan variabel dengan cara ini, prosedur tidak akan lagi memiliki akses eksklusif ke sana. Karena prosedur lain dapat mengakses applesSold
dan mengubah nilainya, total yang berjalan bisa tidak dapat diandalkan dan kode bisa lebih sulit dipertahankan.