Var-arg Cornelius Mellino / Cornelius Koo JavaSchool of Object Technology Pada Java 5, terdapat feature baru yang cukup banyak membantu, yaitu var-arg. Inti dari var-arg adalah programmer mampu memasukkan argumen ke dalam suatu method di mana jumlah argumen bisa bervariasi. Sebelum masuk lebih dalam ke var-arg, kita harus mengulas kembali beberapa hal. Argument dan Parameter Argument adalah sesuatu yang kita deklarasikan atau kita tulis diantara tanda kurung, saat kita memanggil suatu method. Contoh : dosomething(5, what ); Di sini kita memasukkan 2 buah argumen ke method dosomething(), 5 dan what. Parameter adalah sesuatu yang kita deklarasikan pada method signature yang menandakan apa yang kita harapkan saat method dipanggil. Contoh : public void dosomething(int num, String str) { Di sini kita mendefinisikan suatu method yang menerima 2 buah parameter, bertipe int dan String. Aturan pemakaian Var-args 1. Tipe var-args Sama dengan variabel biasa, var-args bisa bernilai apa saja, baik tipe primitif maupun tipe kelas dan array. Contoh : handlearrays(string[] str); dosomething(int, String str); count(int values); 2. Sintaks Variable yang merupakan var-arg harus memakai tanda ( ) tepat dibelakang tipe variabel yang bersangkutan.
Contoh : count(int values); count(double values ); // salah! 3. Parameter lain Pemakaian var-args dapat dilakukan bersama-sama dengan parameter yang lainnya, yang bukan merupakan tipe var-args. Contoh : dosomething(int index, String name, int values); 4. Batas var-args Var-args hanya bisa dipakai satu kali dalam satu method. Var-args hanya bisa dipakai pada urutan terakhir dalam parameter list. Var-args hanya bisa dipakai sebagai tipe suatu parameter untuk suatu method, tidak bisa dipakai sebagai tipe suatu variabel. Contoh : dosomething(int values, int index, String name); // salah! dosomething(string name, int values); // salah! Pemakaian var-args sebagai tipe suatu variabel akan menghasilkan peringatan syntax error. Gambar. Pemakaian var-args dalam variabel menimbulkan syntax error. Pemakaian Var-args
Pemakaian var-args mengikuti aturan penamaan variable biasa, bedanya kita bisa memasukkan jumlah argumen yang bervariasi. Untuk penanganan lebih lanjut, var-args bisa diperlakukan sebagai array, dimana tipe array nya adalah tipe var-args itu sendiri. public class Vararg1 { public static void printvararg(string... strings ) { printvararg("cukup satu saja"); printvararg("satu", "dua", "tiga"); Pemakaian Var-args pada Constructor Var-args bisa juga dipakai pada konstruktor dan aturan yang berlaku sama saja dengan aturan yang berlaku pada method biasa. class Test { Test(String... strings) { System.out.println("object created"); public class Vararg2 { new Test();
new Test("satu argumen"); new Test("satu", "dua", "tiga"); Pada hasil running program di atas terlihat bahwa pada saat pemanggilan konstruktor default tidak ada reaksi apa-apa, yang terlihat hanya tulisan object created yang menjadi tanda tersiptanya suatu objek. Menyimpan Var-args Nilai yang dimasukkan sebagai argumen var-args bisa disimpan ke dalam array dengan tipe yang sama dengan tipe var-args yang bersangkutan. Gambar. Ilustrasi penyimpanan var-args ke dalam variabel bertipe array.
// how to save the vararg to regular variable class Test1 { private int arg; private String[] args; public int getarg() { return arg; public void setarg(int arg) { this.arg = arg; public String[] getargs() { return args; public void setargs(string[] args) { this.args = args; Test1(int val, String... strings) { this.arg = val; this.args = strings; public class Vararg3 { Test1 test = new Test1(1, "satu", "dua", "tiga"); System.out.println(test.getArg()); String[] strings = test.getargs();
Pada contoh di atas var-args pada konstruktor menerima tiga buah string yaitu satu, dua dan tiga. Ketiga string tersebut ditampung dalam variabel bertipe String[] atau array of String. Zero Argument Apa yang terjadi ketika suatu method yang mempunyai parameter bertipe var-args tidak diberi nilai argumen sama sekali. Seperti contoh berikut ini : // zero arg vararg public class Vararg4 { public static void printvararg(string... strings ) { if (strings.length == 0) { System.out.println("no argument entered..."); printvararg(); Ketika kita tidak memberikan masukan apapun ke parameter bertipe var-args, maka method printvararg() juga tidak akan menghasilkan output apapun. Kita bisa mendeteksi apakah suatu parameter bertipe var-args berisi nilai atau tidak, caranya dengan memanfaatkan variabel length seperti pada panjang suatu array.
Gambar. Variabel length yang muncul ketika di tekan titik atau dot pada eclipse....... if (strings.length == 0) { System.out.println("no argument entered..."); System.out.println(strings.length); Argumen Bertipe Objek Selain memakai tipe-tipe primitif, var-args juga bisa bertipe kelas, atau array. Cara pemakaiannya sama saja dengan tipe primitif. Berikut adalah contoh-contoh pemakaian tipe primitif (double) dan tipe kelas (Double) dalam var-args. public class Vararg8 { public static int sum(int... bs ) { int sum = 0;
for (int b : bs) { sum += b; return sum; public static Double sum(double... bs ) { Double sum = 0.0; for (Double b : bs) { sum += b; return sum; System.out.println(sum(1, 2, 3)); System.out.println(sum(1.0, 2.3, 3.1));