Topik ini membahas variabel (variable) dan pengetikan kuat di C#, yaitu cara menyimpan nilai pada nama tertentu beserta aturan yang menjaga tipe datanya tetap konsisten. Empat tipe dasar yang dibahas adalah int, double, string, dan bool, disusul aturan konversi antar tipe dan penetapan tipe otomatis oleh kompilator. Setelah topik ini diselesaikan, deklarasi variabel dapat ditulis dengan tipe yang tepat dan pesan error terkait tipe dapat dibaca dengan percaya diri.
Tipe data dasar#
Variabel adalah nama yang merujuk pada lokasi penyimpanan sebuah nilai dengan tipe tertentu. C# menyediakan banyak tipe bawaan, tetapi empat tipe berikut mencakup kebutuhan umum program konsol pada tahap awal. Tabel berikut merangkum keyword-nya, jenis nilai yang disimpan, dan contoh penulisannya.
| Tipe | Jenis nilai | Contoh penulisan | Nama tipe .NET |
|---|---|---|---|
int | bilangan bulat | 328 | System.Int32 |
double | bilangan pecahan | 27.5 | System.Double |
string | teks | "Bandung" | System.String |
bool | nilai kebenaran | false | System.Boolean |
Deklarasi variabel memakai pola tipe nama = nilai;. Nilai awalnya wajib diberikan sebelum variabel dibaca, dan penamaannya mengikuti konvensi camel case, yaitu huruf kecil pada kata pertama dan huruf besar pada awal kata berikutnya. Program berikut mendeklarasikan satu variabel untuk setiap tipe, lalu mencetak semuanya.
int jumlahHalaman = 328;
double hargaTiket = 27.5;
string namaKota = "Bandung";
bool sudahSelesai = false;
Console.WriteLine(jumlahHalaman);
Console.WriteLine(hargaTiket);
Console.WriteLine(namaKota);
Console.WriteLine(sudahSelesai);328
27.5
Bandung
FalseNilai bool dicetak sebagai False dengan huruf awal kapital, meskipun dalam kode ditulis false. Perhatikan pula bahwa pemisah desimal pada double adalah titik, mengikuti konvensi penulisan C#. Tipe .NET pada kolom terakhir adalah nama resmi tipe tersebut di dalam library standar, dan keduanya dapat dipakai bergantian, tetapi keyword seperti int yang lazim dipakai dalam kode sehari-hari.
Tipe int menyimpan bilangan bulat pada rentang sekitar minus 2,1 miliar sampai 2,1 miliar, dan kebutuhan yang melampaui rentang itu ditampung oleh tipe long. Tipe double menyimpan pecahan dengan presisi ganda, tetapi hasilnya tetap merupakan pendekatan biner dari angka yang ditulis. Aturan penamaannya mengikuti identifier bawaan bahasa, yaitu boleh memuat huruf, angka, dan garis bawah, dengan syarat tidak diawali angka dan tidak bertabrakan dengan keyword bahasa.
Aturan pengetikan kuat#
C# menerapkan strong typing (pengetikan kuat), yaitu tipe setiap variabel ditetapkan saat kompilasi dan tidak dapat berubah selama program berjalan. Kompilator memeriksa setiap penugasan nilai, sehingga nilai yang tipenya tidak cocok ditolak sebelum program sempat dijalankan. Program berikut gagal dikompilasi karena sebuah string tidak dapat dimasukkan ke dalam variabel int.
// tidak-dijalankan
int usia = "dua puluh";Kompilator menolak baris tersebut dengan pesan error CS0029: Cannot implicitly convert type 'string' to 'int'. Pengetikan kuat membuat kelas error ini tersangkut di waktu kompilasi, jauh sebelum program dijalankan oleh pengguna. Perilaku ini berbeda dengan bahasa yang tipe datanya berubah-ubah secara diam-diam, yang kelirunya baru muncul saat program berjalan.
Konversi antar tipe tetap dimungkinkan dengan aturan yang jelas. Konversi dari int ke double bersifat implisit karena tidak ada datanya yang hilang, sedangkan arah sebaliknya memerlukan cast, yaitu konversi eksplisit yang ditulis dengan nama tipe di dalam tanda kurung. Cast dari double ke int memotong bagian desimalnya tanpa membulatkan.
int angkaBulat = 42;
double angkaPecahan = angkaBulat; // konversi implisit dari int ke double
Console.WriteLine(angkaPecahan);
double nilai = 9.7;
int dibulatkan = (int)nilai; // cast eksplisit, bagian desimal dipotong
Console.WriteLine(dibulatkan);42
9Keluaran menunjukkan 9.7 menjadi 9, bukan 10, karena cast hanya memotong. Apabila pembulatan biasa diinginkan, metode Math.Round yang tersedia di library standar dapat digunakan.
Penetapan tipe otomatis#
Keyword var memerintahkan kompilator menetapkan tipe variabel secara otomatis dari nilai awalnya, kemampuan yang disebut type inference (penetapan tipe otomatis). Variabel yang dideklarasikan dengan var tetap bertipe kuat, karena tipe yang disimpulkan itu mengunci variabel tersebut seperti deklarasi biasa. Perbedaannya hanya pada penulisan, bukan pada perilakunya.
var jumlahSiswa = 30;
var rataRata = 87.25;
var namaSekolah = "SMA Negeri 1";
Console.WriteLine(jumlahSiswa.GetType());
Console.WriteLine(rataRata.GetType());
Console.WriteLine(namaSekolah.GetType());System.Int32
System.Double
System.StringMetode GetType() melaporkan tipe sesungguhnya dari setiap variabel saat program berjalan. Keluarannya membuktikan bahwa var bukan tipe data sakti, melainkan singkatan penulisan. Ada dua batasan yang perlu diperhatikan saat memakainya.
// tidak-dijalankan
var kosong;
var nilai = 10;
nilai = "sepuluh";Deklarasi var kosong; ditolak dengan error CS0818 karena var memerlukan nilai awal untuk menyimpulkan tipenya. Penugasan "sepuluh" ke variabel int juga ditolak dengan error CS0029, membuktikan bahwa tipe variabel tersebut terkunci setelah deklarasi. Selain itu, var hanya boleh dipakai untuk variabel lokal, bukan untuk parameter metode maupun field kelas.
Kesalahan umum#
- Membaca variabel sebelum diberi nilai. Variabel lokal yang belum diinisialisasi ditolak dengan
error CS0165: Use of unassigned local variable. Beri nilai awal pada saat deklarasi agar peringatan ini tidak muncul. - Menugaskan
doublekeinttanpa cast. Konversi yang menurunkan presisi tidak dilakukan secara diam-diam, sehingga munculerror CS0266yang menyarankan cast eksplisit. Tambahkan(int)hanya bila pemotongan desimal memang diinginkan. - Mengandalkan
doubleuntuk nilai uang. Tipedoublemenyimpan pecahan secara pendekatan, sehingga penjumlahan uang dapat menghasilkan angka seperti0.30000000000000004. Untuk kebutuhan presisi finansial, tipedecimallebih cocok. - Anggapan bahwa
varbertipe bebas. Tipe hasil inferensi terkunci sejak deklarasi, sehingga penugasan dengan tipe lain selalu ditolak. Perlakukanvarpersis seperti deklarasi biasa.
Ringkasan#
- Empat tipe dasar
int,double,string, danboolmencakup bilangan bulat, bilangan pecahan, teks, dan nilai kebenaran. - Pengetikan kuat menetapkan tipe variabel pada waktu kompilasi, sehingga penugasan dengan tipe yang tidak cocok ditolak dengan pesan error sebelum program dijalankan.
- Konversi melebar dari
intkedoublebersifat implisit, sedangkan arah sebaliknya memerlukan cast yang memotong bagian desimal. varmenyembunyikan penulisan tipe melalui inferensi dari nilai awalnya, tetapi variabelnya tetap bertipe kuat dan terkunci.
Referensi#
- Built-in types — Microsoft Learn — Daftar lengkap tipe bawaan C# beserta nama tipe .NET dan rentang nilainya.
- Cast expressions — Microsoft Learn — Menjelaskan konversi eksplisit dan perilaku pemotongan nilainya.