Variabel dan Tipe

Deklarasi Dim, makna Option Strict On, inferensi tipe, dan tipe dasar .NET.

Daftar isi

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.

vb Program.vb
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 Module
text Keluaran
120
3500.5
87.25
True
Budi
2026-10-26 08:00

Perhatikan 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 VBTipe .NETKegunaanContoh nilai
IntegerSystem.Int32Bilangan bulat pada umumnya120
LongSystem.Int64Bilangan bulat berukuran besar9000000000
DoubleSystem.DoubleBilangan pecahan berpresisi ganda87.25
DecimalSystem.DecimalPecahan yang presisi, misalnya uang3500.5D
BooleanSystem.BooleanNilai benar atau salahTrue
CharSystem.CharSatu karakter"A"c
StringSystem.StringDeretan karakter"Budi"
DateSystem.DateTimeTanggal 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.

vb
' tidak-dijalankan
Dim jumlah As Integer = 3.7 ' error BC30512: konversi Double ke Integer ditolak

Compiler 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.

vb Contoh: konversi eksplisit dengan CInt
Module ContohCInt

    Sub Main()
        Dim rataRata As Double = 3.7
        Dim jumlah As Integer = CInt(rataRata)

        Console.WriteLine(jumlah)
    End Sub

End Module
text Keluaran
4

Inferensi 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.

vb Contoh: inferensi tipe pada Dim tanpa As
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 Module
text Keluaran
Int32: 10
Decimal: 3500.5
String: Budi

Keluaran 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.

Tipe nilai (Integer)25nilai tersimpan langsung pada variabelTipe referensi (String)namaBudi Santosovariabel menyimpan alamat menuju data
Perbedaan penyimpanan data pada tipe nilai dan tipe referensi

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.

  1. Memberi nilai Double ke variabel Decimal tanpa akhiran D. Compiler menolaknya ketika Option Strict On aktif, dan perbaikannya adalah menulis 3500.5D atau mengubah tipe variabelnya.
  2. Menghilangkan nilai awal pada Dim tanpa As. Bentuk Dim jumlah tanpa inisialisasi tidak memberi tipe apa pun untuk ditebak, sehingga compiler melaporkan error dan perbaikannya adalah menambahkan As Tipe atau nilai awal.
  3. Mengonversi teks menjadi angka dengan CInt tanpa kepastian isinya. Teks yang bukan angka memicu exception saat program berjalan, dan pola yang lebih aman menggunakan TryParse dibahas pada topik Input dan Output Console.

Ringkasan#

  • Dim nama As Tipe = nilaiAwal mendeklarasikan variabel dengan tipe eksplisit, dan inferensi tipe memungkinkan As dihilangkan bila nilai awalnya jelas.
  • Tipe VB adalah alias atas tipe .NET, misalnya Integer sama dengan System.Int32 dan Date sama dengan System.DateTime.
  • Option Strict On menolak konversi yang berpotensi kehilangan data, sehingga konversi yang disengaja ditulis dengan CInt, CDbl, CDec, atau CStr.
  • Tipe nilai menyimpan data langsung pada variabelnya, sedangkan tipe referensi menyimpan alamat menuju data di memori.

Referensi#