Parameter Membuat Method Bisa Menerima Input
Method yang selalu melakukan hal yang sama itu terbatas. Parameter adalah input yang kamu deklarasikan di dalam tanda kurung method, sehingga method yang sama bisa bekerja dengan nilai yang berbeda setiap kali dipanggil.
Kamu menulis setiap parameter dengan tipe dan nama. Di dalam badan method, parameter berperilaku seperti variabel lokal biasa yang sudah berisi apa pun yang dikirim pemanggil.
name adalah parameternya. "Sam" dan "Alex" adalah argumennya, yaitu nilai konkret yang diberikan saat pemanggilan. Satu definisi method, dua output yang berbeda.
Parameter vs Argumen
Dua kata ini sering dipakai bergantian, tetapi perbedaannya layak diingat dengan jelas:
- Parameter adalah tempat penampung di deklarasi:
String name. - Argumen adalah nilai yang benar-benar kamu kirim:
"Sam".
Jadi void greet(String name) mendeklarasikan parameter, dan greet("Sam") mengirim argumen. Kalau seseorang berkata "method ini menerima dua parameter", yang dimaksud adalah deklarasinya; "saya mengirim dua argumen" berarti panggilannya.
Banyak Parameter
Pisahkan parameter dengan koma, dan beri masing-masing tipenya sendiri. Kamu tidak bisa memakai satu tipe untuk dua parameter sekaligus seperti yang bisa kamu lakukan di deklarasi variabel:
Argumen dicocokkan dengan parameter murni berdasarkan posisi, bukan nama. describe("Sam", 30, true) berjalan karena urutannya sesuai dengan (String name, int age, boolean active). Kalau kamu menukar dua argumen yang tipenya kompatibel, hasilnya bug logika yang diam-diam, bukan error kompilasi. Jadi urutan itu penting.
Kesalahan yang umum adalah menulis int add(int a, b). Setiap parameter butuh tipenya sendiri: int add(int a, int b).
Mengembalikan Nilai
Parameter adalah jalan data masuk; nilai kembalian adalah jalan hasil keluar. Deklarasikan tipe kembalian sebelum nama method, lalu pakai return untuk menyerahkan nilai ke pemanggil:
Tipe kembalian (double) harus sesuai dengan apa yang benar-benar kamu return. Method yang dideklarasikan void tidak mengembalikan apa pun. Method itu tetap bisa memakai return; saja untuk keluar lebih awal, tetapi tidak bisa mengembalikan nilai. Begitu return dijalankan, method berakhir dan alur program kembali ke tempat pemanggilannya.
Java Itu Pass-by-Value
Hal ini membingungkan hampir semua orang di awal. Saat kamu mengirim argumen, Java menyalin nilainya ke parameter. Untuk tipe primitif, artinya method mendapat salinannya sendiri, jadi mengubah parameter tidak pernah menyentuh variabel milik pemanggil:
x tetap 5. Method itu mengubah salinan angkanya sendiri, bukan aslinya.
Mengirim Objek: Tetap by Value, tapi Perhatikan Referensinya
Objek terasa seperti pengecualian, padahal bukan. Yang disalin adalah referensinya (penunjuk ke objek), bukan objeknya. Jadi method menunjuk ke objek yang sama dan bisa mengubah isinya. Itulah sebabnya menambah elemen ke ArrayList yang dipakai bersama di dalam method terlihat oleh pemanggil:
Dua hasil yang berbeda, satu aturan. addItem mengikuti referensi dan mengubah list yang asli, jadi pemanggil melihat new muncul. replace mengisi ulang parameternya dengan list yang benar-benar baru, tetapi itu hanya mengarahkan ulang salinan lokal dari referensinya, jadi list milik pemanggil tidak tersentuh. Intinya: kamu bisa mengubah objek lewat parameter, tetapi kamu tidak pernah bisa membuat variabel milik pemanggil menunjuk ke tempat lain.
Berikutnya: Method Overloading
Sekarang kamu tahu cara memberi method input yang tepat sesuai kebutuhannya. Tapi bagaimana kalau kamu ingin satu nama method menerima kumpulan parameter yang berbeda, misalnya print(int) dan print(String)? Itulah method overloading, dan itu topik halaman berikutnya.
Pertanyaan yang sering diajukan
Apa perbedaan parameter dan argumen di Java?
Parameter adalah variabel yang ditulis di deklarasi method, misalnya String name di void greet(String name). Argumen adalah nilai sebenarnya yang kamu kirim saat memanggil method, misalnya greet("Sam") mengirim argumen "Sam". Singkatnya: parameter ada di definisi, argumen ada di panggilan.
Apakah Java pass-by-value atau pass-by-reference?
Java selalu pass-by-value. Untuk tipe primitif, yang dikirim adalah salinan nilainya, jadi mengisi ulang parameter tidak bisa mengubah variabel milik pemanggil. Untuk objek, yang dikirim adalah salinan referensinya: kamu bisa mengubah isi objek yang ditunjuk referensi itu (misalnya menambah elemen ke list), tetapi mengisi ulang parameternya sendiri tidak memengaruhi variabel milik pemanggil.
Bagaimana cara mengirim beberapa argumen ke method di Java?
Tulis parameter di deklarasi dengan dipisahkan koma, masing-masing dengan tipenya sendiri: int add(int a, int b). Panggil dengan argumen dalam urutan yang sama: add(2, 3). Java mencocokkan argumen dengan parameter murni berdasarkan posisi, bukan nama, jadi urutannya harus sesuai.