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.
| Bagian | Contoh | Peran |
|---|---|---|
| modifier | static | menandai metode milik kelas, dapat dipanggil tanpa membuat objek |
| tipe kembalian | double | jenis nilai yang dikembalikan, atau void bila tidak mengembalikan apa pun |
| nama metode | celsiusKeFahrenheit | identitas yang dipakai untuk memanggil, ditulis camelCase dan lazimnya diawali kata kerja |
| daftar parameter | double celsius | masukan yang dibutuhkan, tiap parameter terdiri atas tipe dan nama, dipisah koma |
| tubuh metode | { ... } | pernyataan yang dijalankan setiap kali metode dipanggil |
// 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.
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");
}
}0 C -> 32.0 F
37 C -> 98.6 F
100 C -> 212.0 F
98.6 F -> 37.0 CProgram 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.
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);
}
}=== Nilai Ujian ===
Citra: 83.83
Budi: 69.83Program 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.
// 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
returnhanya ada di dalamif. Kompilator menolaknya dengan pesan missing return statement. Tambahkanreturnpada akhir metode atau pada cabang yang terlewat. - Ada pernyataan yang ditulis setelah
returnpada jalur yang sama. Kompilator menandainya unreachable statement karena pernyataan itu tidak pernah sempat dijalankan. Pindahkan pernyataannya ke atasreturnatau hapus. - Tipe argumen dianggap bebas.
intditerima oleh parameterdoublelewat pelebaran otomatis, tetapidoubleditolak oleh parameterinttanpa 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.
returnmengirim nilai sekaligus mengakhiri metode, sedangkanvoidmenandai metode tanpa nilai kembalian.staticmenjadikan metode milik kelas sehingga cukup dipanggil lewat nama kelas selama metode belum bergantung pada data objek.
Referensi#
- Defining Methods — Oracle — aturan deklarasi metode, penamaan, dan parameter pada Java Tutorials.
- Returning a Value from a Method — Oracle
— penjelasan tipe kembalian dan perilaku pernyataan
return.