Copyright (c) - Cornelius Mellino / Cornelius Koo, 2007
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.
Copyright (c) - Cornelius Mellino / Cornelius Koo, 2007
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
Copyright (c) - Cornelius Mellino / Cornelius Koo, 2007
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 ) { for (String str : strings) { System.out.println(str); } } public static void main(String[] args) { 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"); for (String str : strings) { System.out.println(str); } } } public class Vararg2 { public static void main(String[] args) { new Test();
Copyright (c) - Cornelius Mellino / Cornelius Koo, 2007 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.
Copyright (c) - Cornelius Mellino / Cornelius Koo, 2007 // 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 { public static void main(String[] args) { Test1 test = new Test1(1, "satu", "dua", "tiga"); System.out.println(test.getArg()); String[] strings = test.getArgs(); for (String str : strings) { System.out.println(str); } } }
Copyright (c) - Cornelius Mellino / Cornelius Koo, 2007 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..."); } for (String str : strings) { System.out.println(str); } } public static void main(String[] args) { 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.
Copyright (c) - Cornelius Mellino / Cornelius Koo, 2007
Gambar . Variabel length yang muncul ketika di tekan titik atau dot pada eclipse.
... if (strings.length == 0) { System.out.println("no argument entered..."); } for (String str : strings) { System.out.println(str); 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;
Copyright (c) - Cornelius Mellino / Cornelius Koo, 2007 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; } public static void main(String[] args) { System.out.println(sum(1, 2, 3)); System.out.println(sum(1.0, 2.3, 3.1)); } }