Tidak semua method membutuhkan seluruh datanya dari pemanggil. Tiket kereta biasanya berjumlah satu penumpang di kelas reguler, sehingga memaksa pemanggil menulis Tiket.HitungBiaya(100000, 1, false) untuk kasus paling umum terasa berlebihan. C# menyediakan optional parameter: parameter yang diberi nilai default dan boleh dilewati saat pemanggilan.
Aturan Nilai Default #
Parameter menjadi optional ketika deklarasinya diberi nilai default dengan tanda =. Tiga aturan yang harus dipatuhi:
- Parameter optional ditulis
tipe nama = nilaiDefault, misalnyaint jumlahPenumpang = 1. - Parameter optional harus berada setelah semua parameter wajib.
- Nilai default harus berupa konstanta yang diketahui saat kompilasi, seperti angka, string literal,
true/false, ataunull.
Contoh Lengkap #
static class Tiket
{
public static int HitungBiaya(int hargaDasar, int jumlahPenumpang = 1, bool kelasEksekutif = false)
{
int biaya = hargaDasar * jumlahPenumpang;
if (kelasEksekutif)
{
biaya += 50000 * jumlahPenumpang;
}
return biaya;
}
}
int biayaSolo = Tiket.HitungBiaya(100000);
int biayaGrup = Tiket.HitungBiaya(100000, 3);
int biayaEksekutif = Tiket.HitungBiaya(100000, 2, true);
Console.WriteLine($"Solo: {biayaSolo}");
Console.WriteLine($"Grup 3 penumpang: {biayaGrup}");
Console.WriteLine($"Grup 2 eksekutif: {biayaEksekutif}");Output yang Dihasilkan:
Solo: 100000
Grup 3 penumpang: 300000
Grup 2 eksekutif: 300000Mari kita bedah tiga panggilan tersebut:
- Baris 14 (
HitungBiaya(100000)): hanya parameter wajibhargaDasaryang diisi;jumlahPenumpangmemakai default1dankelasEksekutifmemakai defaultfalse, sehingga biaya tetap100000. - Baris 15 (
HitungBiaya(100000, 3)): argument3mengisijumlahPenumpangsecara posisi;kelasEksekutiftetapfalse, sehingga biaya menjadi300000. - Baris 16 (
HitungBiaya(100000, 2, true)): semua parameter terisi; tambahan kelas eksekutif50000 * 2membuat total menjadi300000.
Panggilan pertama menunjukkan manfaat utamanya: pemanggil menulis hanya data yang berbeda dari kebiasaan, dan sisanya diserahkan ke default.
Di balik layar, compiler yang menyelipkan nilai default: pemanggilan yang melewati parameter optional dikompilasi seolah-olah nilai default dikirim secara eksplisit. Perilaku inilah alasan default harus konstanta — nilai itu ditempelkan pada titik panggilan, bukan dihitung ulang oleh method.
Memilih Nilai Default #
Nilai default sebaiknya benar-benar mewakili kebiasaan paling umum, bukan sekadar nilai aman seperti nol. Pada method HitungBiaya, angka 1 dan false dipilih karena tiket solo kelas reguler memang kasus yang paling sering terjadi. Bila kebiasaan berubah, cukup satu baris default yang disesuaikan, dan seluruh pemanggil yang melewatinya ikut berperilaku baru.
Batasan yang Perlu Diketahui #
Optional parameter tidak bisa dilewati satu per satu di tengah. Kita tidak dapat mengisi kelasEksekutif secara posisi tanpa mengisi jumlahPenumpang terlebih dahulu, karena isi argument selalu dipetakan berurutan dari kiri. Solusinya ada pada bab Named Arguments.