Ada situasi ketika nilai awal tidak ditentukan programmer, melainkan sistem: elemen array yang baru dibuat, field pada class yang belum diisi. C# menetapkan satu nilai default untuk setiap tipe, dan keyword default meminta nilai tersebut secara eksplisit. Bab ini memetakan nilai default setiap tipe dan batas penerapannya.
Nilai Default Setiap Tipe #
| Tipe | Nilai Default |
|---|---|
int, long | 0 |
float, double | 0 |
decimal | 0 |
bool | False |
char | '\0' (kode Unicode 0) |
string, object | null |
Tipe angka memperoleh nol, bool memperoleh False, dan reference type memperoleh null — artinya tidak menunjuk object mana pun. Keyword default menghasilkan nilai tersebut langsung dari kode:
Console.WriteLine(default(int));
Console.WriteLine(default(long));
Console.WriteLine(default(double));
Console.WriteLine(default(bool));
Console.WriteLine((int)default(char));
Console.WriteLine(default(string) == null);Output yang Dihasilkan:
0
0
0
False
0
TrueMari kita telaah:
- Baris 1-3:
default(int),default(long), dandefault(double)menghasilkan0. - Baris 4 (
default(bool)): Nilai defaultbooladalahFalse. - Baris 5 (
(int)default(char)):default(char)adalah karakter dengan kode0, ditulis'\0'; karakter itu tidak terlihat saat dicetak, sehingga cast keintmemperlihatkan kodenya. - Baris 6 (
default(string) == null): Reference type memperolehnull; perbandingan menghasilkanTrue.
Sejak C# 7.1, kata default dapat ditulis tanpa tipe ketika tipe target sudah jelas dari konteks. Bentuk default(int) tetap paling eksplisit dan mudah dibaca untuk pembelajaran.
Dalam kode sehari-hari, default jarang ditulis pada deklarasi biasa karena programmer memang langsung memberi nilai bermakna. Nilai default lebih sering muncul dari sisi sistem: pembuatan array baru yang besar, pembuatan object oleh library, atau nilai bawaan yang ditetapkan sebuah API. Mengetahui nilai default setiap tipe membuat perilaku sistem itu dapat diprediksi.
Variable Lokal Tidak Dapat Nilai Default #
Aturan default values tidak berlaku untuk variable lokal. Bab Deklarasi Variabel menunjukkan compiler menolak pembacaan variable lokal yang belum diberi nilai (error CS0165); compiler menuntut definite assignment pada setiap variable lokal. Nilai default otomatis hanya berlaku pada penyimpanan yang dikelola runtime, yaitu field sebuah class dan elemen array yang baru dibuat. Praktiknya akan kita temui saat membahas class dan array pada section berikutnya.
Pembedaan ini punya alasan praktis: array berukuran ribuan elemen tidak perlu diisi satu per satu, karena runtime sudah mengisinya dengan nilai default tipe tersebut. Compiler memilih kebijakan berbeda untuk variable lokal karena nilai bawaan yang tersembunyi mudah menjadi sumber kesalahan logika; compiler lebih suka programmer menyatakan nilai awal secara jelas.