You are currently viewing Parameter Opsional Dan Argumen Bernama Di C#

Parameter Opsional Dan Argumen Bernama Di C#

Halo! Selamat datang kembali di “Seri Belajar Dasar Pemrograman Bahasa C#“. Setelah sebelumnya mempelajari tentang bagaimana mendefinisikan dan memanggil method, lalu dilanjutkan dengan mempelajari bagaimana menggunakan pengubah parameter pada method, kali ini saatnya kita mempelajari apa itu parameter opsional dan argumen bernama di C#.

Parameter Opsional

Dengan mendefinisikan sebuah method dengan satu atau lebih parameter, artinya pada saat memanggil method tersebut, kita perlu menyediakan argumen sesuai dengan jumlah parameternya. Contohnya, method Penjumlahan() dari materi sebelumnya kita definisikan dengan dua parameter seperti berikut ini.

static int Penjumlahan(int x, int y)
{
    return x + y;
}

Dengan begitu, ketika memanggil method tersebut, kita perlu memberi dua argumen untuk kedua parameter tersebut.

static void Main(string[] args)
{
    // Angka 4 merupakan argumen untuk parameter x
    // Angka 5 merupakan argumen untuk parameter y
    Console.WriteLine($"4 + 5 = {Penjumlahan(4, 5)}");            
}

Apabila kita mendefinisikan setiap parameter seperti pada method Penjumlahan() di atas, berarti kita wajib memberi sebuah nilai sebagai argumen untuk setiap parameternya. 

Di C#, kita bisa mendefinisikan sebuah method dengan parameter yang tidak selalu membutuhkan sebuah argumen. Caranya adalah dengan menggunakan parameter opsional.

Mendefinisikan Parameter Opsional

Kode program di bawah ini mendefinisikan method Penjumlahan() yang sama seperti sebelumnya, namun kali ini menggunakan parameter opsional.

static int Penjumlahan(int x, int y = 10)
{
    return x + y;
}

Perhatikan deklarasi parameter y. Daripada sekedar mendeklarasikan parameter tersebut (int y), kali ini kita mendeklarasikanya sekaligus menginisialisasinya dengan nilai 10 (int y = 10). Jika Anda perhatikan, ini sama seperti mendeklarasikan sebuah variabel sekaligus menginisialisasi nilainya.

Dengan mendeklarasikan parameter y seperti di atas, parameter tersebut kini menjadi parameter opsional dari method Penjumlahan(). Sehingga, kita bisa mengabaikan argumen untuk parameter tersebut. 

Console.WriteLine($"4 + 10 = {Penjumlahan(4)}");

// Output: 4 + 10 = 14

Perhatikan bahwa kali ini kita hanya memberi satu buah argumen saja untuk method Penjumlahan(), yaitu 4. Argumen ini akan diberikan kepada parameter x yang bukan merupakan parameter opsional. Sementara, kita sama sekali tidak memberikan argumen apapun untuk parameter y. Namun demikian, method Penjumlahan() tetap akan menghasilkan nilai 14 karena parameter y secara default bernilai 10.

Parameter Opsional VS Variabel Lokal

Lalu apa bedanya dengan mendeklarasikan method Penjumlahan() dengan cara seperti pada kode program di bawah ini?

static int Penjumlahan(int x)
{
    int y = 10;
    return x + y;
}

Baiklah, dengan tetap menggunakan method Penjumlahan() dengan parameter opsional (int y = 10), kita akan mencoba memanggil kembali method tersebut dengan cara yang sama seperti sebelum menggunakan parameter opsional, yaitu dengan memberikan dua argumen.

Console.WriteLine($"4 + 5 = {Penjumlahan(4, 5)}");

Kode program di atas akan menghasilkan keluaran seperti di bawah ini.

4 + 5 = 9

Karena pada dasarnya method Penjumlahan() kita definisikan menggunakan dua parameter, meskipun satu parameter kita deklarasikan sebagai parameter opsional, kita tetap bisa menyediakan dua argumen ketika memanggil method tersebut.

Perhatikan bahwa kali ini kita kembali memberikan nilai 5 sebagai argumen untuk parameter y. Nilai 5 ini nantinya akan menjadi nilai baru dari parameter y

Apabila kita tidak memberikan nilai apapun sebagai argumen untuk parameter y, maka parameter tersebut secara default akan bernilai 10. Sementara, apabila kita memberikan sebuah nilai sebagai argumen untuk parameter y, maka nilai tersebut akan menjadi nilai baru dari parameter tersebut.

Sekarang coba kembali perhatikan method Penjumlahan() dengan satu parameter yang kita definisikan di atas. Di dalam blok method tersebut kita mendeklarasikan sebuah variabel lokal y yang diinisialisasi dengan nilai 10.

Apabila kita mencoba memanggil method tersebut menggunakan dua argumen, kita akan diprotes keras oleh compiler (eror) karena method tersebut hanya bisa menerima satu argumen saja.

Selain itu, karena variabel y adalah sebuah variabel lokal yang tidak bisa kita ubah nilainya menggunakan argumen, variabel tersebut akan selalu bernilai 10. Hal ini membuat method yang kita definisikan menjadi tidak fleksibel.

Argumen Bernama

Pada saat memanggil sebuah method berparameter, satu hal yang perlu diperhatikan adalah posisi urutan argumennya harus sesuai dengan posisi urutan parameternya.

Perhatikan contoh definisi method berikut ini.

static void CetakDetailOrder(string namaPenjual, int noOrder, string namaBarang)
{
    Console.WriteLine($"Penjual: {namaPenjual}, Nomer Order: {noOrder}, Nama barang: {namaBarang}");
}

Pada kode program di atas, kita mendefinisikan sebuah method dengan tiga buah parameter. Method tersebut berfungsi untuk menampilkan nilai dari ketiga parameter tersebut. Sampai di sini, tidak ada hal yang baru buat Anda.

Seperti biasa, kita bisa memanggil method tersebut dengan menyediakan tiga buah argumen seperti berikut ini.

CetakDetailOrder("Slamet", 1, "Bebek Goreng");

Lagi-lagi tidak ada yang baru buat Anda. Jika kode program di atas kita jalankan, kita akan mendapatkan keluaran seperti berikut ini.

Penjual: Slamet, Nomer Order: 1, Nama barang: Ayam goreng

Karena method CetakDetailOrder() mendefinisikan tiga buah parameter, yaitu namaPenjual, noOrder, dan namaBarang secara berurutan, Argumen yang kita berikan juga harus sesuai dengan urutan definisi parameternya.

Argumen teks “Slamet” adalah argumen untuk parameter namaPenjual, angka 1 adalah argumen untuk parameter noOrder, dan teks “Bebek Goreng” adalah argumen untuk parameter namaBarang.

Motivasi Menggunakan Argumen Bernama

Pertanyaannya, apakah kita bisa memberi argumen tanpa memperhatikan posisi urutan parameternya seperti di bawah ini?

CetakDetailOrder(1, "Slamet", "Bebek Goreng");

Jawabannya, tidak.

Kode program di atas akan menghasilkan eror. Parameter namaPenjual dideklarasikan sebagai tipe string, sedangkan angka 1 adalah dari tipe int. Begitu pula dengan parameter noOrder yang dideklarasikan sebagai tipe int tidak bisa menerima “Slamet” yang merupakan argumen dari tipe string.

Bagaimana dengan kode program di bawah ini?

CetakDetailOrder("Bebek Goreng", 1, "Slamet");

Kode program di atas tidak akan menghasilkan eror, namun keluarannya tidak akan sesuai dengan ekspektasi.

Penjual: Bebek Goreng, Nomer Order: 1, Nama barang: Slamet

Argumen seperti ini biasa disebut dengan argumen posisi. Artinya, memberikan suatu nilai sebagai argumen untuk parameternya harus sesuai dengan urutan atau posisi dari setiap parameternya.

Bagaimana jika kita ingin memberi argumen tanpa harus menyesuaikan urutan parameternya?

Di C#, kita bisa menggunakan argumen bernama.

Perhatikan kode program di bawah ini.

CetakDetailOrder(noOrder: 1, namaPenjual: "Slamet", namaBarang: "Bebek Goreng");
CetakDetailOrder(namaBarang: "Bebek Goreng", namaPenjual: "Slamet", noOrder: 1);

Pada pemanggilan method CetakDetailOrder() di atas, kita tidak hanya sekedar menyediakan nilainya saja, namun juga memberi “nama” untuk setiap argumennya. Jika Anda perhatikan, “nama” dari setiap argumen pada kode program di atas adalah nama dari parameter pada method CetakDetailOrder().

Dengan menggunakan argumen bernama seperti di atas, kita tidak lagi harus mengurutkan argumen sesuai dengan urutan parameternya. Apabila kode program di atas kita jalankan, keluaran yang dihasilkan akan seperti berikut ini.

Penjual: Slamet, Nomer Order: 1, Nama barang: Bebek Goreng
Penjual: Slamet, Nomer Order: 1, Nama barang: Bebek Goreng

Bagaimanapun posisi urutan dari argumennya, parameter dari method CetakDetailOrder() tetap bisa mengambil nilai dari argumennya dengan tepat. Sehingga kita akan mendapatkan keluaran yang sesuai dengan ekspektasi.

Selain itu, menggunakan argumen bernama juga memudahkan kita mengidentifikasi parameter yang mana yang direpresentasikan oleh masing-masing argumen.

Menggunakan Argumen Bernama Bersamaan Dengan Argumen Posisi

Pertanyaan selanjutnya, apakah kita bisa menggunakan argumen bernama bersamaan dengan argumen posisi?

Jawabannya, Bisa. Namun, dengan beberapa syarat.

  • Argumen bernama yang tidak ditempatkan pada urutan yang sesuai tidak boleh diikuti oleh argumen posisi.

Kode program di bawah ini menghasilkan eror.

CetakDetailOrder(namaBarang: "Bebek Goreng", "slamet", 1);

Meskipun argumen namaBarang: "Bebek Goreng" merupakan argumen bernama, namun seharusnya tetap diletakkan paling belakang karena diikuti oleh dua argumen posisi, yaitu “slamet” dan 1.

CetakDetailOrder("slamet", 1, namaBarang: "Bebek Goreng");
  • Argumen posisi harus ditempatkan pada posisi urutan yang sesuai.
CetakDetailOrder("slamet", 1, namaBarang: "Bebek Goreng");

Pada kode program di atas, argumen “slamet” yang merupakan argumen posisi sudah diletakkan pada posisi urutan yang benar, yaitu sesuai dengan posisi urutan parameter namaPenjual. Sedangkan kedua argumen yang mengikutinya adalah argumen bernama yang posisi urutannya bisa kita letakkan sesuka hati.

  • Mulai C#7.2, Argumen bernama boleh diikuti oleh argumen posisi jika diletakkan di posisi urutan yang sesuai dengan posisi urutan parameternya.

Pada kode program di bawah, argumen bernama namaPenjual: "Slamet" sebenarnya diikuti oleh dua argumen posisi di mana menurut syarat no 1 tidak diperbolehkan. Namun, karena urutan argumen posisi 1 dan "Bebek Goreng" sudah tepat, hal ini diperbolehkan.

CetakDetailOrder(namaPenjual: "Slamet", 1, "Bebek Goreng");

Penutup

Pada materi kali ini, kita telah mempelajari tentang apa itu parameter opsional, cara mendefinisikannya, dan apa manfaatnya menggunakan paramater opsional di C#.

Selain itu, kita juga telah mempelajari tentang apa itu argumen bernama, apa bedanya dengan argumen posisi, dan bagaimana cara menggunakannya.

Itu saja materi kita kali ini. Jika Anda merasa kesulitan dalam memahami materi ini, jangan menyerah! Tulis kesulitan atau pertanyaan Anda di kolom komentar, saya akan membantu.

Selamat belajar!

Tinggalkan Balasan