Variabel adalah nama yang mengikat sebuah nilai pada tipe tertentu, dan topik ini membahas cara mendeklarasikannya dengan Dim beserta tipe-tipe dasar .NET yang digunakan di sepanjang jalur ini. Pembahasan mencakup makna Option Strict On, konversi eksplisit, inferensi tipe, serta perbedaan ringkas antara tipe nilai dan tipe referensi. Setelah membacanya, pemilihan tipe dan penulisan deklarasi yang diterima compiler dapat dilakukan dengan alasan yang jelas.
Mendeklarasikan variabel dengan Dim#
Kata kunci Dim mendeklarasikan variabel beserta tipenya, dan nilai awal dapat langsung diberikan pada baris yang sama. Bentuk umumnya adalah Dim nama As Tipe = nilaiAwal, sehingga compiler mengetahui tipe data yang boleh disimpan dan operasi yang sah atas variabel tersebut. Satu pernyataan Dim juga dapat mendeklarasikan beberapa variabel sekaligus dengan tanda koma.
Program berikut mendeklarasikan satu variabel untuk setiap tipe dasar lalu menampilkan isinya, dan menjadi berkas utama topik ini.
Module Program
Sub Main()
Dim stok As Integer = 120
Dim harga As Decimal = 3500.5D
Dim rataRata As Double = 87.25
Dim lulus As Boolean = True
Dim nama As String = "Budi"
Dim tanggalUjian As Date = #10/26/2026 8:00:00 AM#
Console.WriteLine(stok)
Console.WriteLine(harga)
Console.WriteLine(rataRata)
Console.WriteLine(lulus)
Console.WriteLine(nama)
Console.WriteLine(tanggalUjian.ToString("yyyy-MM-dd HH:mm"))
End Sub
End Module120
3500.5
87.25
True
Budi
2026-10-26 08:00Perhatikan dua kebiasaan pada program tersebut. Pertama, setiap deklarasi menyebut tipenya secara eksplisit dengan As, sehingga maksud penulisnya terbaca tanpa menebak. Kedua, literal Decimal ditulis dengan akhiran D, dan literal Date diapit tanda pagar, dua bentuk penulisan yang dijelaskan pada bagian berikut.
Tipe dasar .NET#
Tipe-tipe dasar VB.NET adalah alias atas tipe .NET yang sesuai, sehingga Integer dan System.Int32 menunjuk tipe yang sama persis. Tabel berikut merangkum tipe yang paling sering digunakan beserta kegunaannya.
| Tipe VB | Tipe .NET | Kegunaan | Contoh nilai |
|---|---|---|---|
Integer | System.Int32 | Bilangan bulat pada umumnya | 120 |
Long | System.Int64 | Bilangan bulat berukuran besar | 9000000000 |
Double | System.Double | Bilangan pecahan berpresisi ganda | 87.25 |
Decimal | System.Decimal | Pecahan yang presisi, misalnya uang | 3500.5D |
Boolean | System.Boolean | Nilai benar atau salah | True |
Char | System.Char | Satu karakter | "A"c |
String | System.String | Deretan karakter | "Budi" |
Date | System.DateTime | Tanggal beserta waktunya | #10/26/2026# |
Nama alias dan nama .NET keduanya sah dalam kode, tetapi keduanya tetap berbeda dalam penulisan. Metode GetType().Name melaporkan nama .NET-nya, sehingga Integer dilaporkan sebagai Int32, sebagaimana terlihat pada contoh inferensi tipe di bagian belakang topik ini.
Tipe Char menyimpan satu karakter dan ditulis dengan akhiran c, misalnya "A"c. Tipe ini akan muncul kembali pada topik String ketika metode Split meminta pemisah berupa Char.
Option Strict On#
Option Strict On adalah pengaturan compiler yang menolak konversi tipe yang berpotensi kehilangan data, sehingga kesalahan konversi tertangkap saat kompilasi dan bukan saat program berjalan. Seluruh contoh pada jalur ini ditulis dengan pengaturan tersebut, dan proyek yang dibuat melalui dotnet new dapat mengaktifkannya dengan menambahkan <OptionStrict>On</OptionStrict> pada berkas .vbproj. Konversi eksplisit tetap tersedia apabila pembulatan atau kehilangan presisi memang disengaja.
Pelanggaran paling umum adalah memasukkan nilai Double ke dalam variabel Integer tanpa konversi.
' tidak-dijalankan
Dim jumlah As Integer = 3.7 ' error BC30512: konversi Double ke Integer ditolakCompiler menolak baris tersebut dengan pesan berbunyi Option Strict On disallows implicit conversions from 'Double' to 'Integer'. Konversi yang memang diinginkan ditulis secara eksplisit dengan fungsi konversi, misalnya CInt untuk Integer, CDbl untuk Double, CDec untuk Decimal, dan CStr untuk String.
Module ContohCInt
Sub Main()
Dim rataRata As Double = 3.7
Dim jumlah As Integer = CInt(rataRata)
Console.WriteLine(jumlah)
End Sub
End Module4Inferensi tipe#
Inferensi tipe adalah kemampuan compiler menentukan tipe variabel dari nilai awalnya, sehingga kata As boleh dihilangkan pada Dim yang langsung diinisialisasi. Deklarasi Dim jumlah = 10 menghasilkan variabel bertipe Integer, sama persis dengan Dim jumlah As Integer = 10. Variabelnya tetap bertipe kuat, artinya operasi yang tidak sesuai dengan tipe hasil inferensi tetap ditolak compiler.
Module ContohInferensi
Sub Main()
Dim jumlah = 10
Dim harga = 3500.5D
Dim nama = "Budi"
Console.WriteLine($"{jumlah.GetType().Name}: {jumlah}")
Console.WriteLine($"{harga.GetType().Name}: {harga}")
Console.WriteLine($"{nama.GetType().Name}: {nama}")
End Sub
End ModuleInt32: 10
Decimal: 3500.5
String: BudiKeluaran memperlihatkan nama tipe .NET dari hasil inferensi, yaitu Int32 untuk Integer, dan mengonfirmasi bahwa tipe tetap ditetapkan sejak kompilasi. Inferensi menuntut nilai awal yang jelas, sehingga Dim tanpa As dan tanpa inisialisasi ditolak compiler ketika Option Strict On aktif.
Cakupan inferensi ini terbatas pada variabel lokal di dalam prosedur, sedangkan deklarasi pada tingkat kelas tetap menuntut tipe yang ditulis eksplisit. Gaya yang diikuti contoh-contoh di jalur ini adalah menuliskan As pada deklarasi penting agar tipenya terbaca, lalu menyisakan inferensi untuk kasus yang jelas seperti penghitung sederhana.
Tipe nilai dan tipe referensi#
Tipe .NET terbagi dua menurut cara variabelnya menyimpan data. Tipe nilai (value type) menyimpan datanya langsung di dalam variabel, sedangkan tipe referensi (reference type) menyimpan alamat menuju data yang berada di memori. Tipe Integer, Long, Double, Decimal, Boolean, Char, dan Date termasuk tipe nilai, sedangkan String, array, dan kelas termasuk tipe referensi.
Perbedaan yang paling terasa pada tahap awal adalah penyalinan. Penugasan variabel tipe nilai menyalin isinya, sehingga mengubah variabel asal tidak memengaruhi variabel tujuan. Penugasan variabel tipe referensi menyalin alamatnya, sehingga kedua variabel menunjuk data yang sama. Diagram berikut mengilustrasikan kedua cara penyimpanan tersebut.
String termasuk tipe referensi, tetapi isinya tidak dapat diubah setelah dibuat, perilaku yang dijelaskan tuntas pada topik String.
Kesalahan umum#
Tiga kesalahan berikut paling sering muncul saat mendeklarasikan variabel, dan ketiganya berkait dengan tipe.
- Memberi nilai
Doubleke variabelDecimaltanpa akhiranD. Compiler menolaknya ketikaOption Strict Onaktif, dan perbaikannya adalah menulis3500.5Datau mengubah tipe variabelnya. - Menghilangkan nilai awal pada
DimtanpaAs. BentukDim jumlahtanpa inisialisasi tidak memberi tipe apa pun untuk ditebak, sehingga compiler melaporkan error dan perbaikannya adalah menambahkanAs Tipeatau nilai awal. - Mengonversi teks menjadi angka dengan
CInttanpa kepastian isinya. Teks yang bukan angka memicu exception saat program berjalan, dan pola yang lebih aman menggunakanTryParsedibahas pada topik Input dan Output Console.
Ringkasan#
Dim nama As Tipe = nilaiAwalmendeklarasikan variabel dengan tipe eksplisit, dan inferensi tipe memungkinkanAsdihilangkan bila nilai awalnya jelas.- Tipe VB adalah alias atas tipe .NET, misalnya
Integersama denganSystem.Int32danDatesama denganSystem.DateTime. Option Strict Onmenolak konversi yang berpotensi kehilangan data, sehingga konversi yang disengaja ditulis denganCInt,CDbl,CDec, atauCStr.- Tipe nilai menyimpan data langsung pada variabelnya, sedangkan tipe referensi menyimpan alamat menuju data di memori.
Referensi#
- Variable Declaration — Microsoft Learn — Aturan mendeklarasikan variabel dengan Dim beserta tingkat aksesnya.
- Option Strict Statement — Microsoft Learn — Perilaku ketat compiler terhadap konversi sempit dan late binding.
- Local Type Inference — Microsoft Learn — Mekanisme inferensi tipe pada variabel lokal.
- Value Types and Reference Types — Microsoft Learn — Perbedaan tipe nilai dan tipe referensi di VB.NET.
- Data Types — Microsoft Learn — Daftar lengkap tipe data VB.NET dan padanan .NET-nya.