Argument yang dikirim secara posisi menimbulkan dua persoalan: urutannya mudah tertukar dan maknanya tersembunyi di balik angka. Panggilan Tiket.HitungBiaya(100000, true) menyebabkan compiler menolak karena true dipetakan ke parameter kedua yang bertipe int, padahal maksud kita mengisi parameter ketiga. Named arguments menyelesaikan keduanya dengan menyebut nama parameter secara langsung di titik pemanggilan.

Sintaks Named Arguments #

Named argument ditulis dengan format namaParameter: nilai. Aturan praktisnya:

  1. Nama yang ditulis harus persis sama dengan nama parameter pada deklarasi method.
  2. Named arguments diletakkan setelah argument posisional agar urutan tetap jelas.
  3. Antara satu named argument dan yang lain, urutan boleh bebas karena compiler memetakan nilai berdasarkan nama, bukan posisi.

Contoh Lengkap #

Method HitungBiaya dari bab Optional Parameters kembali kita pakai dengan signature yang sama:

csharp
static class Tiket
{
    public static int HitungBiaya(int hargaDasar, int jumlahPenumpang = 1, bool kelasEksekutif = false)
    {
        // body sama seperti bab Optional Parameters
    }
}

int biaya1 = Tiket.HitungBiaya(100000, kelasEksekutif: true);
int biaya2 = Tiket.HitungBiaya(hargaDasar: 100000, jumlahPenumpang: 3);
Console.WriteLine($"Eksekutif solo: {biaya1}");
Console.WriteLine($"Grup reguler: {biaya2}");

Output yang Dihasilkan:

text
Eksekutif solo: 150000
Grup reguler: 300000

Mari kita bedah kedua panggilan tersebut:

  1. Baris 9 (HitungBiaya(100000, kelasEksekutif: true)): argument pertama diisi secara posisi sehingga hargaDasar bernilai 100000; named argument kelasEksekutif: true melompati jumlahPenumpang, yang kemudian memakai default 1. Hasilnya 100000 + 50000 = 150000.
  2. Baris 10 (HitungBiaya(hargaDasar: 100000, jumlahPenumpang: 3)): seluruh argument disebut namanya; kejelasan ini berguna saat nilai seperti 3 tidak langsung terbaca maknanya.
  3. Baris 11-12: kedua hasil dicetak sesuai perhitungan pada poin pertama dan kedua.

Panggilan pertama memperlihatkan keunggulan yang tidak dimiliki argument posisional: parameter optional di tengah dapat dilewati, dan parameter terakhir tetap bisa diisi.

Kapan Named Arguments Layak Dipakai #

Tidak setiap panggilan membutuhkan nama. Kriteria berikut membantu memutuskan:

  • Parameter bertipe bool atau angka yang maknanya tidak jelas dari nilainya, misalnya true pada method perjalanan.
  • Method dengan banyak parameter optional yang sebagian perlu diisi.
  • Kode inti bisnis yang dibaca banyak orang, sehingga setiap nilai harus jelas asal-usulnya.