Setelah kemaren saya bahas optional parameter, sekarang saya akan bahas fitur yang melengkapi optonal parameter yaitu parameter bernama (named parameter). Salah satu manfaat dari parameter bernama adalah untuk memecahkan masalah parameter yang ambigu selama ini. Ambil contoh kutipan kode berikut yang memiliki dua parameter string.
public static void TambahKontak(
string namaLengkap,
string telepon = "",
DateTime? tanggalLahir = null)
{
// tulis kode anda di sini
}
Jenis data dua parameter parameter untuk method TambahKontak di atas adalah string, namun parameter NamaLengkap bukanlah parameter optional. Perhatikan contoh berikut.
TambahKontak(
telepon: "0817240000",
namaLengkap: "Ahmad Masykur",
tanggalLahir: DateTime.Now.AddYears(-17)
);
Contoh di atas, method TambahKontak diisi dengan parameter yang lengkap namun dengan urutan yang tidak sama dengan definisi methodnya. Dengan parameter bernama, kita tidak harus memasukkan parameter sesuai dengan urutannya. Hal ini bermanfaat bila ada lebih dari satu optional parameter dengan tipe data yang sama. Sebagai contoh, tambahkan satu parameter optional AlamatPosel pada method TambahKontak sebagai berikut.
public static void TambahKontak(
string namaLengkap,
string telepon = "",
string posel = "",
DateTime? tanggalLahir = null)
{
// tulis kode anda di sini
}
Anda dapat memanggil method di atas dengan cara sebagai berikut.
TambahKontak(
"Ahmad Masykur",
"ahmad@localhost.localdomain.com");
Method di atas tidak akan membuat compile error karena parameter pertama dan ke dua adalah string, dan parameter ke dua dan seterusnya adalah optional. Namun data yang dimasukkan tidak sesuai dengan yang diharapkan. Alamat posel (email) akan masuk ke data nomor telepon karena parameter kedua adalah nomor telepon. Hal ini bisa dihindari dengan menggunakan nama parameter sebagai berikut.
TambahKontak(
"Ahmad Masykur",
posel: "ahmad@localhost.localdomain.com");
Dengan kode di atas, nilai kedua akan masuk dalam parameter posel. Inilah kelebihan dari optional parameter dan named parameter yang tidak bisa dilakukan dengan overload method pada C# sebelumnya. Coba Anda ganti method di atas dengan overload method, Anda tidak akan bisa melakukannya kecuali membuat method dengan nama yang berbeda.