Bagikan melalui


Ruang Lingkup pada Visual Basic

Cakupan elemen yang dideklarasikan adalah sekumpulan semua kode yang dapat merujuknya tanpa memenuhi syarat namanya atau membuatnya 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 di mana ia dinyatakan
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 kemajuan cakupan ini dari tersempit (blok) ke yang terluas (namespace), di mana cakupan tersempit berarti kumpulan kode terkecil yang dapat merujuk ke elemen tanpa kualifikasi. Untuk informasi selengkapnya, lihat "Tingkat Cakupan" di halaman ini.

Menentukan Cakupan dan Menentukan Variabel

Anda 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 mendefinisikan variabel dengan nama yang sama tetapi cakupan yang berbeda, karena melakukannya dapat menyebabkan 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 Pembatasan Blok

Blok adalah sekumpulan kalimat yang dikelilingi oleh pernyataan deklarasi awal dan akhir, seperti berikut:

  • Do dan Loop

  • For [Each] dan Next

  • If dan End If

  • Select dan End Select

  • SyncLock dan End SyncLock

  • Try dan End Try

  • While dan End While

  • With dan End With

Jika Anda mendeklarasikan variabel dalam blok, Anda hanya dapat menggunakannya dalam blok tersebut. Dalam contoh berikut, cakupan variabel bilangan bulat cube adalah blok antara If dan End If, dan Anda tidak dapat lagi merujuk ke cube setelah eksekusi keluar dari blok tersebut.

If n < 1291 Then
    Dim cube As Integer
    cube = n ^ 3
End If

Nota

Bahkan jika cakupan variabel terbatas pada blok, masa pakainya tetap berlangsung selama seluruh prosedur. Jika Anda memasukkan blok lebih dari sekali selama prosedur, setiap variabel blok mempertahankan nilai sebelumnya. Untuk menghindari hasil yang tidak terduga dalam kasus seperti itu, adalah bijaksana untuk menginisialisasi variabel blok di awal blok.

Cakupan Prosedur

Elemen yang dinyatakan 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 Statis .

Prosedur dan cakupan blok terkait erat. Jika Anda mendeklarasikan variabel di dalam prosedur tetapi di luar blok apa pun dalam prosedur itu, Anda dapat menganggap variabel memiliki cakupan blok, di mana blok adalah seluruh prosedur.

Nota

Semua elemen lokal, bahkan jika mereka adalah Static variabel, bersifat pribadi untuk prosedur di mana elemen tersebut muncul. Anda tidak dapat mendeklarasikan elemen apa pun menggunakan kata kunci Publik dalam prosedur.

Cakupan Modul

Untuk kenyamanan, istilah tunggal tingkat modul berlaku sama untuk modul, kelas, dan struktur. Anda dapat mendeklarasikan elemen pada tingkat ini dengan menempatkan pernyataan deklarasi di luar prosedur atau blok apa pun tetapi 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 Tingkat akses privat tersedia untuk setiap prosedur dalam modul tersebut, tetapi tidak untuk kode apa pun dalam modul yang berbeda. Pernyataan Dim pada tingkat lembaga menjadi Private secara default jika Anda tidak menggunakan kata kunci tingkat akses apa pun. Namun, Anda dapat membuat cakupan dan tingkat akses lebih jelas dengan menggunakan Private kata kunci dalam Dim pernyataan.

Dalam contoh berikut, semua prosedur yang ditentukan dalam modul dapat merujuk ke variabel strMsgstring . Ketika prosedur kedua dipanggil, prosedur tersebut menampilkan konten variabel strMsg string 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

Ruang Lingkup Namespace

Jika Anda mendeklarasikan elemen pada tingkat modul menggunakan kata kunci Teman atau Publik , elemen tersebut akan tersedia untuk semua prosedur di seluruh namespace tempat elemen dideklarasikan. Dengan perubahan berikut ke contoh sebelumnya, variabel strMsg string 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 berlapis. Elemen yang tersedia dari dalam sebuah namespace juga tersedia dari dalam namespace mana pun yang bersarang di dalamnya.

Jika proyek Anda tidak berisi Pernyataan Namespaceapa pun, semua yang ada dalam proyek berada di namespace yang sama. Dalam hal ini, cakupan namespace dapat dianggap sebagai cakupan proyek. Public elemen dalam modul, kelas, atau struktur juga tersedia untuk proyek apa pun 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 perhitungan sementara, karena alasan berikut:

  • Penghindarian Konflik Nama. Nama variabel lokal tidak rentan terhadap konflik. Misalnya, Anda dapat membuat beberapa prosedur berbeda yang berisi variabel yang disebut intTemp. Selama masing-masing intTemp dinyatakan sebagai variabel lokal, setiap prosedur hanya mengenali versinya sendiri dari intTemp. Setiap prosedur dapat mengubah nilai dalam lokalnya intTemp tanpa memengaruhi intTemp variabel dalam prosedur lain.

  • Penggunaan Memori. Variabel lokal hanya menggunakan memori saat prosedurnya berjalan. Penggunaan memori mereka dihentikan ketika prosedur kembali ke kode yang memanggil. Sebaliknya, variabel Bersama dan Statis mengonsumsi sumber daya memori hingga aplikasi Anda berhenti berjalan, jadi gunakan hanya jika diperlukan. Variabel instans mengonsumsi memori saat instansnya terus ada, yang membuatnya kurang efisien daripada variabel lokal, tetapi berpotensi lebih efisien daripada Shared atau Static variabel.

Meminimalkan Cakupan

Secara umum, ketika mendeklarasikan variabel atau konstanta apa pun, adalah praktik pemrograman yang baik untuk membuat cakupan sesempit mungkin (cakupan blok adalah yang paling sempit). Ini membantu menghemat memori dan meminimalkan kemungkinan kode Anda salah merujuk ke variabel yang salah. Demikian pula, Anda harus mendeklarasikan variabel menjadi Statis hanya ketika perlu untuk mempertahankan nilainya di antara panggilan prosedur.

Lihat juga