Bagikan melalui


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 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 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-tiap intTemp dinyatakan sebagai variabel lokal, setiap prosedur hanya akan mengenali versi intTemp-nya sendiri. Setiap prosedur dapat mengubah nilai di intTemp lokalnya tanpa memengaruhi variabel intTemp 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 atau Static.

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.

Lihat juga