Dasar Metode

Mendefinisikan metode dengan parameter dan tipe kembalian, memakai static selama belum butuh objek.

Daftar isi

Program yang seluruh logikanya ditumpuk di dalam main cepat berubah menjadi satu blok kode panjang yang sulit dicari dan sulit diperbaiki. Metode memecah program menjadi satuan tugas bernama: menerima masukan lewat parameter, mengerjakan langkahnya, lalu mengembalikan hasil. Topik ini membahas cara mendefinisikan metode dengan parameter dan tipe kembalian, memanggilnya dari metode lain, serta alasan hampir semua contoh pada tahap ini memakai static. Contohnya berupa utilitas kecil seperti konversi suhu dan pelaporan nilai ujian.

Anatomi deklarasi metode#

Sebuah metode dideklarasikan dengan lima bagian yang urutannya tetap: modifier, tipe kembalian, nama, daftar parameter, dan tubuh metode. Deklarasi ini berperan sebagai kontrak. Pemanggil wajib mengirim argumen dengan jumlah dan tipe yang sesuai, sedangkan metode menjanjikan nilai kembalian bertipe yang tercantum, atau tidak mengembalikan apa pun bila tertulis void.

BagianContohPeran
modifierstaticmenandai metode milik kelas, dapat dipanggil tanpa membuat objek
tipe kembaliandoublejenis nilai yang dikembalikan, atau void bila tidak mengembalikan apa pun
nama metodecelsiusKeFahrenheitidentitas yang dipakai untuk memanggil, ditulis camelCase dan lazimnya diawali kata kerja
daftar parameterdouble celsiusmasukan yang dibutuhkan, tiap parameter terdiri atas tipe dan nama, dipisah koma
tubuh metode{ ... }pernyataan yang dijalankan setiap kali metode dipanggil
java Contoh: bagian-bagian deklarasi metode
// tidak-dijalankan
static double luasPersegiPanjang(double panjang, double lebar) {
    return panjang * lebar;   // pernyataan return mengirim nilai ke pemanggil
}

Nama metode mengikuti gaya camelCase dan lazimnya diawali kata kerja karena metode melakukan sesuatu: hitungTotal, cetakLaporan, atau celsiusKeFahrenheit. Urutan tipe pada daftar parameter ikut menjadi bagian dari identitas metode, sedangkan nama parameternya tidak. Dua metode dengan parameter (double a, double b) dan (double x, double y) memiliki identitas yang sama persis sehingga tidak bisa hidup berdampingan dalam satu kelas. Perbedaan nama parameter hanya penting di dalam tubuh metode tempat nilainya dipakai.

Parameter dan argumen#

Parameter dan argumen sering dipakai bergantian, padahal keduanya berada di sisi yang berbeda. Parameter adalah variabel yang tercantum pada deklarasi metode, sedangkan argumen adalah nilai nyata yang dikirim saat pemanggilan. Setiap kali metode dipanggil, Java membuat variabel parameter baru lalu mengisinya dengan salinan nilai argumen, sehingga metode bekerja pada salinannya sendiri. Karena itu, jumlah dan tipe argumen harus cocok dengan deklarasi metodenya.

java KonverterSuhu.java
public class KonverterSuhu {

    static double celsiusKeFahrenheit(double celsius) {
        return celsius * 9.0 / 5.0 + 32.0;
    }

    static double fahrenheitKeCelsius(double fahrenheit) {
        return (fahrenheit - 32.0) * 5.0 / 9.0;
    }

    public static void main(String[] args) {
        System.out.println("0 C -> " + celsiusKeFahrenheit(0) + " F");
        System.out.println("37 C -> " + celsiusKeFahrenheit(37) + " F");
        System.out.println("100 C -> " + celsiusKeFahrenheit(100) + " F");
        System.out.println("98.6 F -> " + fahrenheitKeCelsius(98.6) + " C");
    }
}
text Keluaran
0 C -> 32.0 F
37 C -> 98.6 F
100 C -> 212.0 F
98.6 F -> 37.0 C

Program di atas dijalankan lewat mode single-file, yaitu java KonverterSuhu.java, tanpa kompilasi manual. Metode celsiusKeFahrenheit menerima satu parameter double dan mengembalikan double, sehingga hasil pemanggilannya bisa langsung dirangkai ke dalam ekspresi pada System.out.println. Rumus konversi cukup ditulis satu kali di dalam metode, sedangkan pemanggilan dilakukan berulang dengan argumen yang berbeda. Bila rumusnya keliru, perbaikan cukup dilakukan di satu tempat.

Tipe kembalian dan return#

Tipe kembalian menetapkan jenis nilai yang dikirim metode kembali kepada pemanggilnya. Pernyataan return mengirim nilai itu dan sekaligus mengakhiri metode, sehingga pernyataan lain pada jalur yang sama tidak pernah sempat dijalankan. Metode bertipe void boleh menulis return tanpa nilai untuk berhenti lebih awal, sedangkan metode bertipe kembalian wajib mengembalikan nilai di setiap jalur eksekusinya.

java PelaporanNilai.java
public class PelaporanNilai {

    static void cetakJudul(String teks) {
        System.out.println("=== " + teks + " ===");
    }

    static double rataRata(double a, double b, double c) {
        return (a + b + c) / 3.0;
    }

    static void cetakNilai(String nama, double nilai) {
        System.out.printf("%s: %.2f%n", nama, nilai);
    }

    public static void main(String[] args) {
        cetakJudul("Nilai Ujian");
        double nilaiCitra = rataRata(78.5, 82.0, 91.0);
        double nilaiBudi = rataRata(65.0, 70.5, 74.0);
        cetakNilai("Citra", nilaiCitra);
        cetakNilai("Budi", nilaiBudi);
    }
}
text Keluaran
=== Nilai Ujian ===
Citra: 83.83
Budi: 69.83

Program ini memuat dua gaya metode sekaligus. Metode rataRata bertipe double, sehingga hasilnya ditampung ke variabel sebelum diteruskan sebagai argumen. Metode cetakJudul dan cetakNilai bertipe void karena tugasnya hanya menampilkan teks dan tidak menghasilkan nilai. Pemanggilan metode bertipe kembalian juga bisa dipakai langsung sebagai ekspresi, misalnya System.out.println(rataRata(70, 80, 90)) tanpa variabel perantara.

java Contoh: berhenti lebih awal dari metode void
// tidak-dijalankan
static void cetakBilaPositif(int angka) {
    if (angka <= 0) {
        return;   // metode void boleh berhenti tanpa membawa nilai
    }
    System.out.println(angka);
}

static dan pemanggilan antarmetode#

Modifier static menjadikan metode milik kelas, bukan milik objek tertentu. Metode static dapat dipanggil langsung dengan namanya dari metode static lain di kelas yang sama, seperti main memanggil cetakJudul dan rataRata pada program sebelumnya. Dari kelas lain, pemanggilannya dilakukan lewat nama kelas, misalnya PelaporanNilai.rataRata(2, 4, 6).

Pendekatan ini memadai selama metode hanya memproses parameter dan variabel lokalnya. Begitu logika bergantung pada data milik sebuah objek, metode dideklarasikan tanpa static dan dipanggil lewat objeknya. Selama objek belum dibutuhkan, static adalah pilihan baku untuk utilitas seperti konversi satuan dan perhitungan.

Kesalahan umum#

  • Metode bertipe kembalian memiliki jalur yang tidak mengembalikan nilai, misalnya return hanya ada di dalam if. Kompilator menolaknya dengan pesan missing return statement. Tambahkan return pada akhir metode atau pada cabang yang terlewat.
  • Ada pernyataan yang ditulis setelah return pada jalur yang sama. Kompilator menandainya unreachable statement karena pernyataan itu tidak pernah sempat dijalankan. Pindahkan pernyataannya ke atas return atau hapus.
  • Tipe argumen dianggap bebas. int diterima oleh parameter double lewat pelebaran otomatis, tetapi double ditolak oleh parameter int tanpa cast eksplisit karena nilainya bisa terpotong.
  • Hasil metode bertipe kembalian tidak dipakai sama sekali, misalnya rataRata(70, 80, 90) yang berdiri sendiri. Pemanggilan itu tetap menghitung, lalu hasilnya dibuang. Tampung hasilnya ke variabel atau serahkan langsung ke pernyataan yang memakainya.

Ringkasan#

  • Metode dideklarasikan dengan modifier, tipe kembalian, nama, daftar parameter, dan tubuh metode.
  • Parameter adalah variabel baru yang diisi salinan nilai argumen pada setiap pemanggilan.
  • return mengirim nilai sekaligus mengakhiri metode, sedangkan void menandai metode tanpa nilai kembalian.
  • static menjadikan metode milik kelas sehingga cukup dipanggil lewat nama kelas selama metode belum bergantung pada data objek.

Referensi#