Bagikan melalui


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:

    Lihat Tingkat akses di Visual Basic.

  • 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, PrivateShared, 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 Dimsuatu 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