Deklarasi string namaProduk = "Kopi Gayo"; menyebut tipe dua kali: di sisi kiri sebagai tipe variable, di sisi kanan sebagai tipe literal. Keyword var memangkas pengulangan tersebut: programmer menulis tipe sekali, dan compiler menyimpulkan sisanya dari inisialisasi. Bab ini membahas cara kerja inferensi tipe, batasan yang ditegakkan compiler, serta kapan var layak dipakai.

Cara Kerja Inferensi Tipe #

csharp
var namaProduk = "Kopi Gayo";
var hargaPerPaket = 85000;

Console.WriteLine(namaProduk);
Console.WriteLine(namaProduk.GetType());
Console.WriteLine(hargaPerPaket);
Console.WriteLine(hargaPerPaket.GetType());

hargaPerPaket = 92000;
Console.WriteLine(hargaPerPaket);

Output yang Dihasilkan:

text
Kopi Gayo
System.String
85000
System.Int32
92000

Mari kita telaah baris demi baris:

  1. Baris 1 (var namaProduk = "Kopi Gayo";): Compiler membaca sisi kanan, menyimpulkan tipe string, lalu mencatat variable sebagai string sejak kompilasi.
  2. Baris 2 (var hargaPerPaket = 85000;): Literal integer tanpa suffix disimpulkan sebagai int, sama seperti deklarasi eksplisit.
  3. Baris 4 dan 6 (GetType()): Output membuktikan inferensi bersifat compile-time; tipe sudah tercatat pasti, bukan ditunda ke runtime.
  4. Baris 8-9 (hargaPerPaket = 92000;): Variable var tetap boleh diganti nilainya, asalkan tipenya sama.

var bukan tipe tanpa tipe. Setiap variable var memiliki tipe yang pasti dan tercatat pada compiler; yang ditunda hanya penulisan tipe oleh programmer. Keyword ini juga hanya sah untuk variable lokal; bentuk deklarasi lain pada C# tetap menuntut tipe eksplisit.

Tiga Aturan yang Ditegakkan Compiler #

Aturan pertama: var wajib disertai inisialisasi. Tanpa sisi kanan, compiler tidak punya bahan untuk menyimpulkan:

csharp
var nama;

Pesan compiler:

text
Program.cs(1,5): error CS0818: Implicitly-typed variables must be initialized

Aturan kedua: null saja tidak cukup sebagai inisialisasi, karena null tidak memberi petunjuk tipe:

csharp
var nama = null;

Pesan compiler:

text
Program.cs(1,5): error CS0815: Cannot assign <null> to an implicitly-typed variable

Aturan ketiga: tipe terkunci setelah deklarasi. Mengisi nilai dengan tipe lain ditolak:

csharp
var nama = "Budi";
nama = 5;

Pesan compiler:

text
Program.cs(2,8): error CS0029: Cannot implicitly convert type 'int' to 'string'

Variable nama disimpulkan bertipe string sejak baris 1, sehingga angka 5 tidak dapat masuk. Salinan lengkap ketiga pesan memuat path project; bagian itu dipangkas agar ringkas.

Ketiga pesan di atas muncul saat kompilasi, sebelum program berjalan. Perilaku ini berbeda dengan dynamic yang menunda segala pemeriksaan; pada var, kesalahan tipe masih bisa tertangani di editor sebelum kode dijalankan.

Kapan var Layak Dipakai #