Method pada Chapter sebelumnya sudah menerima masukan lewat sapa(String nama), dan sekarang kita perlu meluruskan dua istilah yang kerap tertukar: parameter dan argument. Keduanya berada di sisi yang berbeda dari sebuah pemanggilan — parameter ditulis pada deklarasi method sebagai placeholder, sedangkan argument adalah nilai konkret yang dikirim pemanggil. Pemahaman beda ini membuat pesan error compiler menjadi mudah dibaca karena pesan tersebut selalu memakai dua istilah itu. Pada Chapter ini kita bedah keduanya, lalu uji apa yang terjadi bila jumlah atau urutan argument tidak cocok dengan deklarasinya.

Parameter adalah Placeholder Deklarasi #

Parameter dideklarasikan di dalam tanda kurung pada kepala method, masing-masing sebagai pasangan tipe nama, dipisah koma. Parameter adalah variabel baru yang lahir setiap kali method dipanggil: nilainya diisi dari argument yang dikirim pemanggil, dan umurnya berakhir bersama selesainya pemanggilan itu. Method boleh tidak menerima parameter sama sekali (()), menerima satu, atau menerima beberapa sekaligus.

IstilahLokasiWujudContoh
ParameterDeklarasi methodPasangan tipe dan namalaporanNilai(String nama, int nilai)
ArgumentLokasi pemanggilanNilai atau ekspresi bertipe cocoklaporanNilai("Budi", 82)

Analogi sederhananya: parameter adalah kolom isian pada formulir, sedangkan argument adalah tulisan yang kita masukkan ke kolom tersebut. Satu formulir (method) dapat diisi berkali-kali dengan isi berbeda (argument), dan tipe kolom menentukan isi apa saja yang sah.

Argument adalah Nilai dari Pemanggil #

Program berikut mendeklarasikan method laporanNilai dengan dua parameter — nama bertipe String dan nilai bertipe int — lalu memanggilnya tiga kali dengan argument berbeda:

java ProfilSiswa.java
public class ProfilSiswa {

    // Dua parameter pada deklarasi: nama (String) dan nilai (int)
    static void laporanNilai(String nama, int nilai) {
        String predikat = (nilai >= 75) ? "LULUS" : "REMEDIAL";
        System.out.println(nama + " : " + nilai + " (" + predikat + ")");
    }

    public static void main(String[] args) {
        // Tiga pasangan argument dari pemanggil, urutan sesuai deklarasi
        laporanNilai("Budi", 82);
        laporanNilai("Siti", 74);
        laporanNilai("Dewi", 90);
    }
}

Output yang Dihasilkan:

text
Budi : 82 (LULUS)
Siti : 74 (REMEDIAL)
Dewi : 90 (LULUS)

Mari kita telaah baris-baris kode di atas:

  1. Baris 4 (static void laporanNilai(String nama, int nilai) {): deklarasi dua parameter. Parameter pertama menampung teks nama; parameter kedua menampung angka nilai. Urutan ini menjadi kontrak yang wajib diikuti setiap pemanggil.
  2. Baris 5 (String predikat = ...): variabel lokal predikat dihitung dari parameter nilai — bukti bahwa parameter dapat dipakai layaknya variabel biasa di dalam badan method.
  3. Baris 15-17 (laporanNilai("Budi", 82); dst.): tiga pemanggilan dengan argument berbeda. "Budi" mengisi parameter nama dan 82 mengisi parameter nilai; penempatan dilakukan menurut posisi, bukan nama.

Perhatikan bahwa hasil setiap baris keluaran berbeda meski badan method identik — hanya argument yang berubah. Method menyediakan perilaku; pemanggil menyediakan data.

Argument Dievaluasi Sebelum Dikirim #

Argument tidak harus berupa literal seperti "Budi" atau 82. Setiap ekspresi Java yang bertipe cocok boleh dipakai, dan JVM mengevaluasi ekspresi tersebut lebih dulu sampai menjadi satu nilai, barulah nilai hasilnya dikirim ke parameter:

public class EvaluasiArgumen {

    static void tampilkan(String label, int hasil) {
        System.out.println(label + " = " + hasil);
    }

    public static void main(String[] args) {
        int panjang = 12;
        int lebar = 5;

        // Argument berupa ekspresi: dievaluasi lebih dulu sebelum dikirim
        tampilkan("luas", panjang * lebar);
        tampilkan("keliling", 2 * (panjang + lebar));
        tampilkan("kuadrat panjang", panjang * panjang);
    }
}

Output yang Dihasilkan:

text
luas = 60
keliling = 34
kuadrat panjang = 144

Bedah singkatnya: panjang * lebar dievaluasi menjadi 60 sebelum mengisi parameter hasil, 2 * (panjang + lebar) menjadi 34, dan panjang * panjang menjadi 144. Method tampilkan tidak pernah tahu argument berasal dari literal, variabel, atau perkalian — method hanya menerima nilai jadi. Mekanisme mengevaluasi lalu menyalin nilai ini akan kembali menjadi sorotan pada Chapter Pass by Value.

Jumlah dan Tipe Argument Harus Cocok #

Compiler javac memeriksa setiap pemanggilan terhadap deklarasi method sebelum program berjalan. Pemanggilan dengan jumlah argument yang tidak sama persis langsung ditolak:

public class ArgumenKurang {

    static void sapa(String nama, int umur) {
        System.out.println("Halo, " + nama + "! Umur saya " + umur + ".");
    }

    public static void main(String[] args) {
        // Method membutuhkan dua argument, pemanggil hanya mengirim satu
        sapa("Budi");
    }
}

Compiler javac menolak dengan pesan error: method sapa in class ArgumenKurang cannot be applied to given types; lalu merinci ketidakcocokannya: required: String,int (yang dibutuhkan deklarasi), found: String (yang dikirim pemanggil), dan reason: actual and formal argument lists differ in length — daftar argument aktual tidak sama panjang dengan daftar parameter formal. Kata formal menunjuk ke parameter pada deklarasi; kata actual menunjuk ke argument pada pemanggilan.

Urutan tipe juga diikat kontrak yang sama. Bila kita memanggil sapa(17, "Budi"), compiler menjawab argument mismatch; int cannot be converted to String — angka 17 tidak dapat mengisi parameter pertama yang bertipe String, meski jumlah argument sudah benar.

Selama argument dikirim dengan jumlah, tipe, dan urutan yang cocok, method bekerja tanpa peduli asal-usul nilainya. Namun method pada contoh kita sejauh ini hanya melakukan aksi mencetak — bagaimana caranya method mengirim hasil kembali ke pemanggil? Chapter Return Values membahas kata kunci return beserta aturan jalurnya.

Referensi #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

ArgumenKurang.java

Unduh berkas
java
public class ArgumenKurang {

    static void sapa(String nama, int umur) {
        System.out.println("Halo, " + nama + "! Umur saya " + umur + ".");
    }

    public static void main(String[] args) {
        // Method membutuhkan dua argument, pemanggil hanya mengirim satu
        sapa("Budi");
    }
}

EvaluasiArgumen.java

Unduh berkas
java
public class EvaluasiArgumen {

    static void tampilkan(String label, int hasil) {
        System.out.println(label + " = " + hasil);
    }

    public static void main(String[] args) {
        int panjang = 12;
        int lebar = 5;

        // Argument berupa ekspresi: dievaluasi lebih dulu sebelum dikirim
        tampilkan("luas", panjang * lebar);
        tampilkan("keliling", 2 * (panjang + lebar));
        tampilkan("kuadrat panjang", panjang * panjang);
    }
}

ProfilSiswa.java

Unduh berkas
java
public class ProfilSiswa {

    // Dua parameter pada deklarasi: nama (String) dan nilai (int)
    static void laporanNilai(String nama, int nilai) {
        String predikat = (nilai >= 75) ? "LULUS" : "REMEDIAL";
        System.out.println(nama + " : " + nilai + " (" + predikat + ")");
    }

    public static void main(String[] args) {
        // Tiga pasangan argument dari pemanggil, urutan sesuai deklarasi
        laporanNilai("Budi", 82);
        laporanNilai("Siti", 74);
        laporanNilai("Dewi", 90);
    }
}