Pernyataan Dim (Visual Basic)
Mendeklarasikan dan mengalokasikan ruang penyimpanan untuk satu atau lebih variabel.
Sintaks
[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] variablelist
Generator
attributelist
Opsional. Lihat Daftar Atribut.
accessmodifier
Opsional. Bisa jadi salah satu dari yang berikut:
Shared
Opsional. Lihat Dibagikan.
Shadows
Opsional. Lihat Bayangan.
Static
Opsional. Lihat Statis.
ReadOnly
Opsional. Lihat ReadOnly.
WithEvents
Opsional. Menentukan bahwa ini adalah variabel objek yang merujuk ke instans kelas yang dapat menaikkan peristiwa. Lihat WithEvents.
variablelist
Harus diisi. Daftar konstanta yang dideklarasikan dalam pernyataan ini.
variable [ , variable ... ]
Setiap
variable
memiliki sintaks dan bagian berikut:variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With
{[ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]
Bagian Deskripsi variablename
Harus diisi. Nama variabel. Lihat Nama Elemen yang Dideklarasikan. boundslist
Opsional. Daftar batas setiap dimensi variabel array. New
Opsional. Membuat instans baru kelas saat pernyataan Dim
berjalan.datatype
Opsional. Jenis data variabel. With
Opsional. Memperkenalkan daftar penginisialisasi objek. propertyname
Opsional. Nama properti di kelas tempat Anda membuat instans. propinitializer
Diperlukan setelah propertyname
=. Ekspresi yang dievaluasi dan ditetapkan ke nama properti.initializer
Opsional jika New
tidak ditentukan. Ekspresi yang dievaluasi dan ditetapkan ke variabel saat dibuat.
Keterangan
Pengkompilasi Visual Basic menggunakan pernyataan Dim
untuk menentukan jenis data variabel dan informasi lainnya, seperti kode apa yang dapat mengakses variabel. Contoh berikut mendeklarasikan variabel untuk menyimpan nilai Integer
.
Dim numberOfStudents As Integer
Anda dapat menentukan jenis data apa pun atau nama enumerasi, struktur, kelas, atau antarmuka.
Dim finished As Boolean
Dim monitorBox As System.Windows.Forms.Form
Untuk jenis referensi, Anda menggunakan kata kunci New
untuk membuat instans baru kelas atau struktur yang ditentukan oleh jenis data. Jika Anda menggunakan New
, Anda tidak menggunakan ekspresi penginisialisasi. Sebagai gantinya, Anda menyediakan argumen, jika diperlukan, ke konstruktor kelas tempat Anda membuat variabel.
Dim bottomLabel As New System.Windows.Forms.Label
Anda dapat mendeklarasikan variabel dalam prosedur, blok, kelas, struktur, atau modul. Anda tidak dapat mendeklarasikan variabel dalam file sumber, namespace layanan, atau antarmuka. Untuk informasi selengkapnya, lihat Konteks Deklarasi dan Tingkat Akses Default.
Variabel yang dideklarasikan pada tingkat modul, di luar prosedur apa pun, adalah variabel anggotaatau bidang. Variabel anggota berada dalam cakupan di seluruh kelas, struktur, atau modul mereka. Variabel yang dideklarasikan pada tingkat prosedur adalah variabel lokal. Variabel lokal hanya berada dalam cakupan dalam prosedur atau bloknya.
Pengubah akses berikut digunakan untuk mendeklarasikan variabel di luar prosedur: Public
, Protected
, Friend
, Protected Friend
, dan Private
. Untuk informasi selengkapnya, lihat Tingkat akses di Visual Basic.
Kata kunci Dim
bersifat opsional dan biasanya dihilangkan jika Anda menentukan salah satu pengubah berikut: Public
, Protected
,Friend
, Protected Friend
, Private
Shared
, Shadows
, Static
, ReadOnly
, atau WithEvents
.
Public maximumAllowed As Double
Protected Friend currentUserName As String
Private salary As Decimal
Static runningTotal As Integer
Jika Option Explicit
aktif (default), pengkompilasi memerlukan deklarasi untuk setiap variabel yang Anda gunakan. Untuk informasi selengkapnya lihat Pernyataan Eksplisit Opsi.
Menentukan nilai awal
Anda dapat menetapkan nilai ke variabel saat dibuat. Untuk jenis nilai, Anda menggunakan penginisialisasi untuk menyediakan ekspresi yang akan ditetapkan ke variabel. Ekspresi harus mengevaluasi ke konstanta yang dapat dihitung pada waktu kompilasi.
Dim quantity As Integer = 10
Dim message As String = "Just started"
Jika penginisialisasi ditentukan dan jenis data tidak ditentukan dalam klausa As
, inferensi jenis digunakan untuk menyimpulkan jenis data dari penginisialisasi. Dalam contoh berikut, baik num1
maupun num2
diketik dengan kuat sebagai bilangan bulat. Dalam deklarasi kedua, inferensi jenis menyimpulkan jenis dari nilai 3.
' Use explicit typing.
Dim num1 As Integer = 3
' Use local type inference.
Dim num2 = 3
Inferensi jenis berlaku pada tingkat prosedur. Inferensi Ini tidak berlaku di luar prosedur di kelas, struktur, modul, atau antarmuka. Untuk informasi selengkapnya, lihat Pernyataan Inferensi Opsi dan Inferensi Jenis Lokal.
Untuk informasi tentang apa yang terjadi ketika tipe data atau penginisialisasi tidak ditentukan, lihat Tipe Dan Nilai Data Default nanti dalam topik ini.
Anda dapat menggunakan penginisialisasi objek untuk mendeklarasikan instans jenis bernama dan anonim. Kode berikut membuat instans kelas Student
dan menggunakan penginisialisasi objek untuk menginisialisasi properti.
Dim student1 As New Student With {.First = "Michael",
.Last = "Tucker"}
Untuk informasi selengkapnya tentang penginisialisasi objek, lihat Cara: Mendeklarasikan Objek dengan Menggunakan Penginisialisasi Objek Penginisialisasi Objek: Tipe Bernama dan Anonim, dan Jenis Anonim.
Mendeklarasikan beberapa variabel
Anda dapat mendeklarasikan beberapa variabel dalam satu pernyataan deklarasi, menentukan nama variabel untuk masing-masing variabel, dan mengikuti setiap nama array dengan tanda kurung. Variabel yang jamak dipisahkan oleh koma.
Dim lastTime, nextTime, allTimes() As Date
Jika Anda mendeklarasikan lebih dari satu variabel dengan satu klausul As
, Anda tidak dapat menyediakan penginisialisasi untuk grup variabel tersebut.
Anda dapat menentukan jenis data yang berbeda untuk variabel yang berbeda dengan menggunakan klausul As
terpisah untuk setiap variabel yang Anda deklarasikan. Setiap variabel mengambil jenis data yang ditentukan dalam klausa pertama As
yang ditemui setelahvariablename
bagiannya.
Dim a, b, c As Single, x, y As Double, i As Integer
' a, b, and c are all Single; x and y are both Double
Larik
Anda dapat mendeklarasikan variabel untuk menahan array, yang dapat menyimpan beberapa nilai. Untuk menentukan bahwa variabel menyimpan array, ikuti variablename
dengan tanda kurung segera. Untuk informasi selengkapnya tentang array, lihat Array.
Anda dapat menentukan batas bawah dan atas dari setiap dimensi array. Untuk melakukan ini, sertakan boundslist
di dalam tanda kurung. Untuk setiap dimensi, boundslist
menentukan batas atas dan secara opsional batas bawah. Batas bawah selalu nol, apakah Anda menentukannya atau tidak. Setiap indeks dapat bervariasi dari nol melalui nilai terikat atasnya.
Dua pernyataan berikut setara. Setiap pernyataan mendeklarasikan array 21 elemen Integer
. Saat Anda mengakses array, indeks dapat bervariasi dari 0 hingga 20.
Dim totals(20) As Integer
Dim totals(0 To 20) As Integer
Pernyataan berikut mendeklarasikan array dua-dimensi dari jenis Double
. Array memiliki 4 baris (3 + 1) dari 6 kolom (5 + 1) masing-masing. Perhatikan bahwa batas atas mewakili nilai yang setinggi mungkin untuk indeks, bukan panjang dimensi. Panjang dimensi adalah batas atas ditambah satu.
Dim matrix2(3, 5) As Double
Array bisa memiliki 1 hingga 32 dimensi.
Anda dapat membiarkan semua batas kosong dalam deklarasi array. Jika Anda melakukan ini, array memiliki jumlah dimensi yang Anda tentukan, tetapi tidak diinisialisasi. Array akan memiliki nilai Nothing
sampai Anda menginisialisasi setidaknya beberapa elemennya. Pernyataan Dim
harus menentukan batas baik untuk semua dimensi atau untuk tanpa dimensi.
' Declare an array with blank array bounds.
Dim messages() As String
' Initialize the array.
ReDim messages(4)
Jika array memiliki lebih dari satu dimensi, Anda harus menyertakan koma di antara tanda kurung untuk menunjukkan jumlah dimensi.
Dim oneDimension(), twoDimensions(,), threeDimensions(,,) As Byte
Anda dapat mendeklarasikan array panjang-nol dengan mendeklarasikan salah satu dimensi array menjadi -1. Variabel yang menyimpan array panjang-nol tidak memiliki nilai Nothing
. Array dengan panjang-nol diperlukan oleh fungsi runtime bahasa umum tertentu. Jika Anda mencoba mengakses array semacam ini, pengecualian runtime terjadi. Untuk informasi selengkapnya, lihat Array.
Anda dapat menginisialisasi nilai array dengan menggunakan literal array. Untuk melakukan ini, kelilingi nilai inisialisasi dengan kurung kurawal ({}
).
Dim longArray() As Long = {0, 1, 2, 3}
Untuk array multidimensi, inisialisasi untuk setiap dimensi terpisah diapit kurung kurawal di dimensi luar. Elemen ditentukan dalam urutan baris-utama.
Dim twoDimensions(,) As Integer = {{0, 1, 2}, {10, 11, 12}}
Untuk informasi selengkapnya tentang array, lihat Array.
Nilai dan Jenis Data Default
Tabel berikut ini menjelaskan hasil berbagai kombinasi dari menentukan jenis data dan penginisialisasi dalam Dim
suatu pernyataan.
Jenis data yang ditentukan? | Inisialisasi yang ditentukan? | Contoh | Hasil |
---|---|---|---|
Tidak | Tidak | Dim qty |
Jika Opsi Ketat nonaktif (default), variabel diatur ke Nothing .Jika Option Strict aktif, kesalahan waktu kompilasi terjadi. |
Tidak | Ya | Dim qty = 5 |
Jika Opsi Inferensi aktif (default), variabel mengambil jenis data penginisialisasi. LihatInferensi Jenis Lokal. Jika Option Infer nonaktif dan Option Strict nonaktif, variabel akan mengambil jenis data dariObject .Jika Option Infer nonaktif dan Option Strict aktif, kesalahan waktu kompilasi muncul. |
Ya | Tidak | Dim qty As Integer |
Variabel diinsialisasi ke nilai default untuk jenis data. Lihat tabel nanti di bagian ini. |
Ya | Ya | Dim qty As Integer = 5 |
Jika jenis data inisialisasi tidak dapat dikonversi ke jenis data tertentu, kesalahan waktu kompilasi akan terjadi. |
Jika Anda menentukan jenis data tetapi tidak menentukan penginisialisasi, Visual Basic menginisialisasi variabel ke nilai default untuk jenis datanya. Tabel berikut menunjukkan nilai inisialisasi default.
Jenis Data | Nilai default |
---|---|
Semua jenis numerik (termasuk Byte dan SByte ) |
0 |
Char |
Biner 0 |
Semua jenis referensi (termasuk Object , String , dan semua array) |
Nothing |
Boolean |
False |
Date |
12:00 dari 1 Januari tahun 1 (01/01/0001 12:00:00) |
Setiap elemen struktur diinsialisasi seolah-olah variabel yang terpisah. Jika Anda mendeklarasikan panjang array tetapi tidak menginisialisasi elemennya, setiap elemen diinisialisasi seolah-olah variabel terpisah.
Masa pakai variabel lokal statis
Variabel lokal Static
memiliki masa pakai yang lebih lama daripada masa pakai prosedur tempat variabel tersebut dideklarasikan. Batas-batas masa pakai variabel bergantung pada tempat prosedur dideklarasikan dan apakah itu Shared
.
Deklarasi prosedur | Variabel diinisialisasi | Variabel berhenti ada |
---|---|---|
Dalam modul | Pertama kali prosedur ini disebut | Ketika program Anda menghentikan eksekusi |
Dalam kelas atau struktur, prosedurnya adalah Shared |
Pertama kali prosedur ini dipanggil baik pada instans tertentu atau pada nama kelas atau struktur itu sendiri | Ketika program Anda menghentikan eksekusi |
Di kelas atau struktur, prosedur bukan Shared |
Pertama kali prosedur dipanggil pada instans tertentu | Ketika instans dirilis untuk pengumpulan sampah (GC) |
Atribut dan Pengubah
Anda hanya dapat menerapkan atribut ke variabel anggota, bukan ke variabel lokal. Atribut memberikan informasi ke metadata rakitan, yang tidak bermakna untuk penyimpanan sementara seperti variabel lokal.
Pada tingkat modul, Anda tidak dapat menggunakan pengubah Static
untuk mendeklarasikan variabel anggota. Pada tingkat prosedur, Anda tidak dapat menggunakan Shared
, Shadows
, ReadOnly
, WithEvents
atau pengubah akses apa pun untuk mendeklarasikan variabel lokal.
Anda dapat menentukan kode apa yang dapat mengakses variabel dengan menyediakan accessmodifier
. Variabel anggota kelas dan modul (di luar prosedur apa pun) default ke akses privat, dan variabel anggota struktur default ke akses publik. Anda dapat menyesuaikan tingkat aksesnya dengan pengubah akses. Anda tidak dapat menggunakan pengubah akses pada variabel lokal (di dalam prosedur).
Anda hanya dapat menentukan WithEvents
pada variabel anggota, bukan pada variabel lokal di dalam prosedur. Jika Anda menentukan WithEvents
, jenis data variabel harus merupakan jenis kelas tertentu, bukan Object
. Anda tidak dapat mendeklarasikan array dengan WithEvents
. Untuk informasi selengkapnya tentang peristiwa, lihat Peristiwa.
Catatan
Kode di luar kelas, struktur, atau modul harus memenuhi syarat nama variabel anggota dengan nama kelas, struktur, atau modul tersebut. Kode di luar prosedur atau blokir tidak dapat merujuk ke variabel lokal apa pun dalam prosedur atau blok tersebut.
Merilis sumber daya terkelola
Pengumpul sampah .NET Framework membuang sumber daya terkelola tanpa pengodean tambahan di bagian Anda. Namun, Anda dapat memaksa pembuangan sumber daya terkelola alih-alih menunggu pengumpul sampah.
Jika kelas menahan sumber daya yang sangat berharga dan langka (seperti koneksi database atau handel file), Anda mungkin tidak ingin menunggu sampai pengumpulan sampah berikutnya untuk membersihkan instans kelas yang tidak lagi digunakan. Kelas dapat mengimplementasikan antarmuka IDisposable untuk menyediakan cara untuk melepaskan sumber daya sebelum pengumpulan sampah. Kelas yang mengimplementasikan antarmuka tersebut mengekspos metode Dispose
yang dapat dipanggil untuk memaksa sumber daya berharga segera dirilis.
Pernyataan Using
ini mengotomatiskan proses memperoleh sumber daya, menjalankan serangkaian pernyataan, lalu membuang sumber daya. Namun, sumber daya harus menerapkan antarmuka IDisposable. Untuk informasi selengkapnya, lihat Pernyataan Using.
Contoh 1
Contoh berikut mendeklarasikan variabel menggunakan pernyataan Dim
dengan berbagai opsi.
' Declare and initialize a Long variable.
Dim startingAmount As Long = 500
' Declare a local variable that always retains its value,
' even after its procedure returns to the calling code.
Static totalSales As Double
' Declare a variable that refers to an array.
Dim highTemperature(31) As Integer
' Declare and initialize an array variable that
' holds four Boolean check values.
Dim checkValues() As Boolean = {False, False, True, False}
Contoh 2
Contoh berikut mencantumkan angka utama antara 1 hingga 30. Cakupan variabel lokal dijelaskan dalam komentar kode.
Public Sub ListPrimes()
' The sb variable can be accessed only
' within the ListPrimes procedure.
Dim sb As New System.Text.StringBuilder()
' The number variable can be accessed only
' within the For...Next block. A different
' variable with the same name could be declared
' outside of the For...Next block.
For number As Integer = 1 To 30
If CheckIfPrime(number) = True Then
sb.Append(number.ToString & " ")
End If
Next
Debug.WriteLine(sb.ToString)
' Output: 2 3 5 7 11 13 17 19 23 29
End Sub
Private Function CheckIfPrime(ByVal number As Integer) As Boolean
If number < 2 Then
Return False
Else
' The root and highCheck variables can be accessed
' only within the Else block. Different variables
' with the same names could be declared outside of
' the Else block.
Dim root As Double = Math.Sqrt(number)
Dim highCheck As Integer = Convert.ToInt32(Math.Truncate(root))
' The div variable can be accessed only within
' the For...Next block.
For div As Integer = 2 To highCheck
If number Mod div = 0 Then
Return False
End If
Next
Return True
End If
End Function
Contoh 3
Dalam contoh berikut, variabel speedValue
dideklarasikan pada tingkat kelas. Kata kunci Private
digunakan untuk mendeklarasikan variabel. Variabel dapat diakses oleh prosedur apa pun di kelas Car
.
' Create a new instance of a Car.
Dim theCar As New Car()
theCar.Accelerate(30)
theCar.Accelerate(20)
theCar.Accelerate(-5)
Debug.WriteLine(theCar.Speed.ToString)
' Output: 45
Public Class Car
' The speedValue variable can be accessed by
' any procedure in the Car class.
Private speedValue As Integer = 0
Public ReadOnly Property Speed() As Integer
Get
Return speedValue
End Get
End Property
Public Sub Accelerate(ByVal speedIncrease As Integer)
speedValue += speedIncrease
End Sub
End Class
Lihat juga
- Pernyataan Konstanta
- Pernyataan ReDim
- Pernyataan Eksplisit Opsi
- Pernyataan Inferensi Opsi
- Pernyataan Ketat Opsi
- Kompilasi Halaman, Desainer Project (Visual Basic)
- Deklarasi Variabel
- Array
- Penginisialisasi Objek: Jenis Bernama dan Anonim
- Jenis Anonim
- Penginisialisasi Objek: Jenis Bernama dan Anonim
- Cara: Mendeklarasikan Objek Menggunakan Penginisialisasi Objek
- Inferensi Jenis Lokal