Method
Membuat method dengan parameter dan nilai kembalian, overloading, varargs, scope variabel, dan rekursi sederhana.
Apa itu method?
Method adalah blok kode bernama yang bisa dipanggil berulang kali. Dengan method, program jadi rapi, tidak berulang (prinsip DRY — Don't Repeat Yourself), dan mudah diuji. Di bab sebelumnya kamu sudah memakai main dan println; sekarang kamu membuat method sendiri.
Anatomi method
public static int tambah(int a, int b) {
return a + b;
}
| Bagian | Arti |
|---|---|
public static | Modifier. static artinya method milik class, bisa dipanggil tanpa membuat objek (sementara ini kita pakai static; di bab OOP kita lepas). |
int | Tipe nilai kembalian. Jika tidak mengembalikan apa pun, tulis void. |
tambah | Nama method (camelCase, biasanya kata kerja). |
(int a, int b) | Daftar parameter beserta tipenya. |
return | Mengembalikan nilai ke pemanggil dan mengakhiri method. |
Memanggil method
public class Main {
static int tambah(int a, int b) {
return a + b;
}
static void sapa(String nama) {
System.out.println("Halo, " + nama); // void: tidak ada return nilai
}
public static void main(String[] args) {
int hasil = tambah(3, 4);
System.out.println(hasil); // 7
sapa("Sari");
}
}
Argumen yang dikirim harus cocok dengan parameter: jumlah, urutan, dan tipenya.
Pass-by-value
Java selalu mengirim salinan nilai. Mengubah parameter bertipe primitif di dalam method tidak mengubah variabel asli. Untuk objek, yang disalin adalah referensi-nya, sehingga isi objek bisa berubah (dibahas di bab OOP).
static void ubah(int x) { x = 99; }
int a = 1;
ubah(a);
System.out.println(a); // tetap 1
Overloading
Beberapa method boleh bernama sama asalkan daftar parameternya berbeda (jumlah atau tipe). Java memilih yang cocok saat dipanggil.
static int tambah(int a, int b) { return a + b; }
static double tambah(double a, double b) { return a + b; }
static int tambah(int a, int b, int c) { return a + b + c; }
tambah(1, 2); // versi int
tambah(1.5, 2.5); // versi double
Perbedaan hanya pada tipe kembalian tidak cukup untuk overloading.
Varargs
static int jumlah(int... angka) {
int total = 0;
for (int a : angka) total += a;
return total;
}
jumlah(); // 0
jumlah(1, 2, 3); // 6
int... memperlakukan argumen sebagai array. Varargs harus menjadi parameter terakhir.
Scope variabel
Variabel hanya hidup di dalam blok { } tempat ia dideklarasikan.
for (int i = 0; i < 3; i++) {
int kuadrat = i * i;
}
// System.out.println(i); // ERROR: i sudah tidak ada
// System.out.println(kuadrat); // ERROR
Rekursi
Method boleh memanggil dirinya sendiri. Wajib punya kasus dasar agar berhenti.
static int faktorial(int n) {
if (n <= 1) return 1; // kasus dasar
return n * faktorial(n - 1); // pemanggilan diri sendiri
}
// faktorial(5) = 5 * 4 * 3 * 2 * 1 = 120
Tanpa kasus dasar, terjadi StackOverflowError.
Praktik baik
- Satu method, satu tugas. Beri nama yang menjelaskan tugasnya (
hitungDiskon, bukanproses1). - Usahakan method pendek (puluhan baris, bukan ratusan).
- Method yang mengembalikan nilai sebaiknya tidak sekaligus mencetak; biarkan pemanggil memutuskan.