Cakupan di Visual Basic
Cakupan elemen yang dideklarasikan adalah kumpulan semua kode yang dapat merujuknya tanpa memenuhi syarat nama atau membuatnya menjadi tersedia melalui Pernyataan Impor (Namespace dan Jenis .NET). Elemen dapat memiliki cakupan di salah satu tingkat berikut:
Tingkat | Deskripsi |
---|---|
Cakupan blok | Hanya tersedia dalam blok kode tempat kode dideklarasikan |
Cakupan prosedur | Tersedia untuk semua kode dalam prosedur tempat kode dideklarasikan |
Cakupan modul | Tersedia untuk semua kode dalam modul, kelas, atau struktur tempat kode dideklarasikan |
Cakupan namespace | Tersedia untuk semua kode di namespace tempat kode dideklarasikan |
Tingkat cakupan ini berkembang dari yang tersempit (blok) ke yang terluas (namespace), dengan cakupan tersempit yang berarti set kode terkecil yang dapat merujuk ke elemen tanpa kualifikasi. Untuk informasi selengkapnya, lihat "Tingkat Cakupan" di halaman ini.
Menentukan Cakupan dan Variabel
Anda dapat menentukan cakupan elemen saat Anda mendeklarasikannya. Cakupan dapat bergantung pada faktor-faktor berikut:
Wilayah (blok, prosedur, modul, kelas, atau struktur) tempat Anda mendeklarasikan elemen
Namespace yang berisi deklarasi elemen
Tingkat akses yang Anda deklarasikan untuk elemen
Berhati-hatilah saat Anda menentukan variabel dengan nama yang sama tetapi dengan cakupan yang berbeda, karena dapat memberi Anda hasil yang tidak terduga. Untuk informasi selengkapnya, lihat Referensi ke Elemen yang Dideklarasikan.
Tingkat Cakupan
Elemen pemrograman tersedia di seluruh wilayah tempat Anda mendeklarasikannya. Semua kode di wilayah yang sama dapat merujuk ke elemen tanpa memenuhi syarat namanya.
Cakupan Blok
Blok adalah sekumpulan pernyataan yang diapit dalam awalan dan akhiran pernyataan deklarasi, seperti berikut:
Do
danLoop
For
[Each
] danNext
If
danEnd If
Select
danEnd Select
SyncLock
danEnd SyncLock
Try
danEnd Try
While
danEnd While
With
danEnd With
Jika Anda mendeklarasikan variabel dalam blok, Anda hanya dapat menggunakannya dalam blok tersebut. Dalam contoh berikut, cakupan cube
variabel integer adalah blok antara If
dan End If
, dan Anda tidak dapat lagi merujuk ke cube
saat eksekusi melewati blok.
If n < 1291 Then
Dim cube As Integer
cube = n ^ 3
End If
Catatan
Bahkan jika cakupan variabel terbatas pada blok, masa pakainya masih sama dengan masa pakai seluruh prosedur. Jika Anda memasukkan blok lebih dari sekali selama prosedur, setiap variabel blok akan mempertahankan nilai sebelumnya. Untuk menghindari hasil yang tidak terduga dalam kasus seperti itu, sebaiknya menginisialisasi variabel blok di awal blok.
Cakupan Prosedur
Elemen yang dideklarasikan dalam prosedur tidak tersedia di luar prosedur tersebut. Hanya prosedur yang berisi deklarasi yang dapat menggunakannya. Variabel pada tingkat ini juga dikenal sebagai variabel lokal. Anda mendeklarasikannya dengan Pernyataan Dim, dengan atau tanpa kata kunci Statik.
Cakupan prosedur dan blok berkaitan sangat erat. Jika Anda mendeklarasikan variabel di dalam prosedur tetapi di luar blok dalam prosedur tersebut, Anda dapat menganggap variabel memiliki cakupan blok, dengan blok yang merupakan seluruh prosedur.
Catatan
Semua elemen lokal, bahkan jika merupakan variabel Static
, bersifat privat untuk prosedur tempat elemen tersebut muncul. Anda tidak dapat mendeklarasikan elemen apa pun dengan menggunakan kata kunci Publik dalam prosedur.
Cakupan Modul
Untuk memudahkan, tingkat modul istilah tunggal berlaku sama untuk modul, kelas, dan struktur. Anda dapat mendeklarasikan elemen pada tingkat ini dengan menempatkan pernyataan deklarasi di luar prosedur atau blok, tetapi tetap berada dalam modul, kelas, atau struktur.
Saat Anda membuat deklarasi di tingkat modul, tingkat akses yang Anda pilih menentukan cakupan. Namespace yang berisi modul, kelas, atau struktur juga memengaruhi cakupan.
Elemen yang Anda deklarasikan sebagai tingkat akses Privat tersedia untuk setiap prosedur dalam modul tersebut, tetapi tidak untuk kode dalam modul yang berbeda. Pernyataan Dim
di tingkat modul akan kembali ke Private
jika Anda tidak menggunakan kata kunci tingkat akses. Namun, Anda dapat membuat cakupan dan tingkat akses menjadi lebih jelas dengan menggunakan kata kunci Private
dalam pernyataan Dim
.
Dalam contoh berikut, semua prosedur yang ditentukan dalam modul dapat merujuk ke variabel string strMsg
. Saat prosedur kedua dipanggil, prosedur tersebut akan menampilkan konten variabel string strMsg
dalam kotak dialog.
' Put the following declaration at module level (not in any procedure).
Private strMsg As String
' Put the following Sub procedure in the same module.
Sub initializePrivateVariable()
strMsg = "This variable cannot be used outside this module."
End Sub
' Put the following Sub procedure in the same module.
Sub usePrivateVariable()
MsgBox(strMsg)
End Sub
Cakupan Namespace
Jika Anda mendeklarasikan elemen pada tingkat modul dengan menggunakan kata kunci Teman atau Publik, elemen tersebut akan tersedia untuk semua prosedur di seluruh namespace tempat elemen dideklarasikan. Dengan perubahan berikut pada contoh sebelumnya, variabel string strMsg
dapat dirujuk oleh kode di mana saja di namespace deklarasinya.
' Include this declaration at module level (not inside any procedure).
Public strMsg As String
Cakupan namespace menyertakan namespace bersarang. Elemen yang tersedia dari dalam namespace juga tersedia dari dalam namespace apa pun yang bersarang di dalam namespace tersebut.
Jika proyek Anda tidak berisi Pernyataan Namespace, semua yang ada dalam proyek berada di namespace yang sama. Dalam hal ini, cakupan namespace dapat dianggap sebagai cakupan proyek. Elemen Public
dalam modul, kelas, atau struktur juga tersedia untuk setiap proyek yang mereferensikan proyek mereka.
Pilihan Cakupan
Saat Anda mendeklarasikan variabel, Anda harus mengingat poin-poin berikut saat memilih cakupannya.
Keuntungan Variabel Lokal
Variabel lokal adalah pilihan yang baik untuk segala jenis pemghitungan sementara, karena alasan berikut:
Penghindaran Konflik Nama. Nama variabel lokal tidak rentan terhadap konflik. Misalnya, Anda dapat membuat beberapa prosedur berbeda yang berisi variabel yang disebut
intTemp
. Selama tiap-tiapintTemp
dinyatakan sebagai variabel lokal, setiap prosedur hanya akan mengenali versiintTemp
-nya sendiri. Setiap prosedur dapat mengubah nilai diintTemp
lokalnya tanpa memengaruhi variabelintTemp
di prosedur lain.Konsumsi Memori. Variabel lokal hanya mengonsumsi memori saat prosedurnya sedang berjalan. Memori dirilis ketika prosedur kembali ke kode panggilan. Sebaliknya, variabel Bersama dan Statik mengonsumsi sumber daya memori hingga aplikasi Anda berhenti berjalan, jadi gunakan hanya jika diperlukan. Variabel instans mengonsumsi memori sedangkan instansnya selalu tersedia, sehingga membuatnya kurang efisien daripada variabel lokal, tetapi berpotensi lebih efisien daripada variabel
Shared
atauStatic
.
Meminimalkan Cakupan
Secara umum, ketika mendeklarasikan variabel atau konstanta, merupakan praktik pemrograman yang baik untuk membuat cakupan sesempit mungkin (cakupan blok adalah yang paling sempit). Ini akan membantu menghemat memori dan meminimalkan kemungkinan kode Anda salah merujuk ke variabel yang salah. Demikian pula, Anda harus mendeklarasikan variabel menjadi Statik hanya ketika perlu untuk mempertahankan nilainya di antara panggilan-panggilan prosedur.