Dasar Metode

Parameter, nilai kembali, dan metode static.

Daftar isi

Metode adalah blok kode bernama yang menjalankan satu tugas tertentu dan dapat dipanggil berulang kali dari bagian lain program. Topik ini membahas anatomi deklarasi metode, peran parameter dan nilai kembali (return value), perbedaan metode bertipe void dengan metode yang mengembalikan nilai, serta makna kata kunci static. Setelah topik ini, program yang panjang dapat dipecah menjadi satuan pekerjaan kecil yang bernama, teruji, dan mudah dibaca ulang.

Mengapa program dipecah menjadi metode#

Program yang seluruh logikanya ditulis berurutan di satu tempat cepat sulit diikuti seiring bertambahnya panjang kode. Metode memecah program menjadi satuan pekerjaan yang diberi nama deskriptif, sehingga pembaca kode menangkap maksudnya tanpa membedah setiap baris. Satu metode juga cukup ditulis sekali lalu dipanggil dari banyak tempat, sehingga perbaikan hanya perlu dilakukan pada satu lokasi. Nama metode yang baik menjadi kosa kata program, sehingga baris pemanggilnya dapat dibaca seperti kalimat.

Kebiasaan yang sehat adalah memberi satu metode satu tugas dan menamainya sesuai tugas tersebut. Metode Jumlahkan sebaiknya hanya menjumlahkan, sedangkan penguraian masukan dan pencetakan hasil ditempatkan pada metode lain atau pada badan program. Ukuran yang layak dipegang adalah satu metode muat dalam satu layar tanpa menggulir, karena metode yang memanjang biasanya menandakan tugasnya perlu dipecah lagi. Pembagian semacam ini juga mempersempit wilayah pencarian apabila program menunjukkan keluaran yang keliru.

Anatomi deklarasi metode#

Deklarasi metode terdiri atas tipe kembalian, nama metode, daftar parameter dalam tanda kurung, dan badan metode di dalam kurung kurawal. Nama metode pada konvensi .NET ditulis dengan huruf kapital pada setiap kata, misalnya Jumlahkan atau TampilkanGaris. Parameter adalah nama variabel yang tercantum pada deklarasi, sedangkan argumen (argument) adalah nilai nyata yang dikirim pemanggil.

csharp Contoh: parameter menerima argumen sesuai posisinya
Kalikan(3, 4);

// Angka dan pengali adalah parameter, sedangkan 3 dan 4 adalah argumennya.
static void Kalikan(int angka, int pengali)
{
    int hasil = angka * pengali;
    Console.WriteLine($"{angka} x {pengali} = {hasil}");
}
text Keluaran
3 x 4 = 12

Contoh di atas mendeklarasikan metode Kalikan dengan dua parameter bertipe int. Pemanggilan Kalikan(3, 4) mengirim argumen 3 ke parameter angka dan argumen 4 ke parameter pengali sesuai posisinya. Kata kunci void pada posisi tipe kembalian menyatakan metode tidak mengembalikan apa pun, sehingga pemanggilannya tidak dapat dipakai sebagai nilai di dalam ekspresi.

Daftar parameter juga boleh kosong untuk metode yang tidak memerlukan masukan, dan pemanggilannya ditulis dengan tanda kurung kosong. Sebaliknya, semakin panjang daftar parameter sebuah metode, semakin besar kemungkinan pemanggil tertukar urutannya, sehingga daftar yang panjang biasanya menandakan metode perlu disederhanakan atau dipecah.

Pernyataan return dan nilai kembali#

Pernyataan return mengirimkan nilai kembali ke pemanggil dan sekaligus menghentikan eksekusi metode pada titik itu. Tipe nilai yang dikirim return wajib sesuai dengan tipe kembalian pada deklarasi. Apabila metode memiliki percabangan, setiap jalur eksekusi wajib berakhir dengan return, jika tidak, kompilator menolak program dengan error CS0161.

csharp Contoh: return pertama yang tercapai menentukan hasilnya
Console.WriteLine(Klasifikasikan(85));

// Return pertama yang tercapai menentukan nilai kembali metode ini.
static string Klasifikasikan(int nilai)
{
    if (nilai >= 80)
    {
        return "Sangat baik";
    }
    return "Perlu latihan";
}
text Keluaran
Sangat baik

Pada pemanggilan Klasifikasikan(85), kondisi nilai >= 80 terpenuhi, sehingga metode berhenti pada return pertama dan baris terakhirnya tidak pernah dijalankan. Metode yang badannya hanya satu ekspresi dapat diringkas dengan bentuk expression-bodied, yaitu tanda => yang langsung diikuti ekspresi yang dikembalikan. Bentuk ringkas ini hanya cocok untuk badan metode yang memang berupa satu ekspresi.

csharp Contoh: bentuk ringkas expression-bodied
Console.WriteLine(Kuadrat(9));

// Bentuk expression-bodied merangkum metode satu ekspresi.
static int Kuadrat(int n) => n * n;
text Keluaran
81

Metode static dan pemanggilannya#

Kata kunci static menyatakan bahwa metode melekat pada kelasnya, bukan pada objek tertentu, sehingga metode dapat dipanggil dengan menyebut namanya tanpa membuat objek terlebih dahulu. Metode Console.WriteLine yang dipakai sepanjang jalur ini adalah contoh metode static milik kelas Console. Program utuh berikut menghimpun tiga metode pembantu static di bawah pernyataan top-level (top-level statement), yaitu pernyataan program yang ditulis tanpa pembungkus kelas dan metode Main. Salin programnya ke berkas Program.cs, lalu jalankan dengan dotnet run --file Program.cs.

csharp Program.cs
// Program dasar metode: parameter, nilai kembali, dan metode static.

int total = Jumlahkan(12, 30);
Console.WriteLine($"Jumlah 12 dan 30 adalah {total}.");

TampilkanGaris(20);

double rataRata = RataRata(8, 9, 10);
Console.WriteLine($"Rata-rata 8, 9, dan 10 adalah {rataRata}.");

TampilkanGaris(20);

// Metode static ini mengembalikan hasil penjumlahan dua bilangan.
static int Jumlahkan(int a, int b)
{
    return a + b;
}

// Metode void hanya menjalankan aksi dan tidak mengembalikan nilai.
static void TampilkanGaris(int panjang)
{
    Console.WriteLine(new string('-', panjang));
}

// Tipe kembalian double dipilih karena hasil pembagiannya bisa pecahan.
static double RataRata(int a, int b, int c)
{
    return (a + b + c) / 3.0;
}
text Keluaran
Jumlah 12 dan 30 adalah 42.
--------------------
Rata-rata 8, 9, dan 10 adalah 9.
--------------------

Metode Jumlahkan mengembalikan nilai, sehingga pemanggilannya langsung dipakai untuk mengisi variabel total. Metode TampilkanGaris bertipe void dan dipanggil sebagai pernyataan berdiri sendiri, dua kali tanpa perlu ditulis ulang. Metode RataRata mengembalikan double karena hasil pembagian bisa berupa pecahan, dan karena 27 habis dibagi 3, keluarannya tampil sebagai 9 tanpa bagian desimal.

Kesalahan umum#

Tiga kesalahan berikut paling sering muncul ketika metode pertama kali ditulis.

  • Tidak semua jalur mengembalikan nilai. Apabila salah satu cabang if tidak diakhiri return, kompilator menolak program dengan error CS0161 karena metode bertipe kembalian wajib mengembalikan nilai pada setiap jalur. Perbaikannya adalah menambah return pada cabang yang kurang atau di akhir metode.
  • Hasil metode void dipakai sebagai nilai. Ekspresi seperti int x = TampilkanGaris(20); ditolak karena metode bertipe void tidak menghasilkan apa pun untuk diisi ke variabel.
  • Jumlah atau tipe argumen tidak cocok. Pemanggilan Jumlahkan(2) ditolak dengan error CS1501 karena parameternya kurang, sedangkan Jumlahkan(2, "tiga") ditolak dengan error CS1503 karena tipe argumennya tidak sesuai. Kompilator mencocokkan setiap argumen dengan parameter secara berurutan.

Ringkasan#

  • Metode dideklarasikan dengan tipe kembalian, nama, daftar parameter, dan badan di dalam kurung kurawal.
  • Parameter adalah nama pada deklarasi, sedangkan argumen adalah nilai nyata yang dikirim pemanggil.
  • Pernyataan return mengirim nilai kembali dan menghentikan metode, sedangkan void menyatakan tidak ada nilai yang dikembalikan.
  • Metode static melekat pada kelasnya sehingga dapat dipanggil tanpa membuat objek terlebih dahulu.

Referensi#