Varargs Java (Argumen Variabel) Dengan Contoh

Pada artikel ini, Anda akan belajar tentang vararg di Java dengan bantuan contoh. Anda juga akan belajar kapan menggunakan vararg dan kapan tidak menggunakannya.

Apa itu varargs di Jawa?

Misalkan Anda membuat metode Java. Namun, Anda tidak yakin berapa banyak argumen yang akan diterima metode Anda. Untuk mengatasi masalah ini, Java 1.5 memperkenalkan varargs.

Varargs adalah nama pendek untuk argumen variabel. Di Java, argumen metode dapat menerima sejumlah nilai yang berubah-ubah. Argumen yang dapat menerima sejumlah nilai variabel ini disebut varargs.

Sintaks untuk mengimplementasikan varargs adalah sebagai berikut:

 accessModifier methodName (datatype… arg) (// method body)

Untuk mendefinisikan vararg, (tiga titik) digunakan dalam parameter formal sebuah metode.

Metode yang mengambil sejumlah variabel dari argumen disebut metode variabel-arity, atau hanya metode varargs.

Pertama, mari kita lihat contoh tanpa menggunakan varargs:

 class NoVararg ( public int sumNumber(int a, int b)( return a+b; ) public int sumNumber(int a, int b, int c)( return a+b+c; ) public static void main( String() args ) ( NoVararg obj = new NoVararg(); System.out.println(obj.sumNumber(1, 2)); System.out.println(obj.sumNumber(1, 2, 3)); ) )

Saat Anda menjalankan program ini, hasilnya adalah:

 3 6

Seperti yang dapat Anda lihat dengan jelas, Anda harus membebani sumNumber()metode untuk membuatnya bekerja untuk 3 argumen.

Bagaimana jika pengguna ingin menambahkan 5 angka atau 10 atau 100?

Ini dapat ditangani dengan rapi dengan menggunakan vararg. Mari kita lihat contoh kode:

Contoh: Bekerja dari vararg

 class VarargExample ( public int sumNumber(int… args)( System.out.println("argument length: " + args.length); int sum = 0; for(int x: args)( sum += x; ) return sum; ) public static void main( String() args ) ( VarargExample ex = new VarargExample(); int sum2 = ex.sumNumber(2, 4); System.out.println("sum2 = " + sum2); int sum3 = ex.sumNumber(1, 3, 5); System.out.println("sum3 = " + sum3); int sum4 = ex.sumNumber(1, 3, 5, 7); System.out.println("sum4 = " + sum4); ) )

Saat Anda menjalankan program, hasilnya adalah:

 panjang argumen: 2 jumlah2 = 6 panjang argumen: 3 sum3 = 9 panjang argumen: 4 jumlah4 = 16

Di sini, sumNumber()metode mengembalikan jumlah intparameter yang diteruskan padanya (tidak masalah jumlah argumen yang diteruskan).

Seperti yang Anda lihat, vararg bisa sangat berguna dalam beberapa situasi. Namun, jika Anda yakin tentang jumlah argumen yang diteruskan ke suatu metode, gunakan metode overloading sebagai gantinya. Misalnya, jika Anda yakin bahwa sumNumber()metode hanya akan digunakan untuk menghitung jumlah dari 2 atau 3 argumen, gunakan overloading seperti pada contoh pertama.

Mari kita ambil contoh lain. Metode format () yang didefinisikan di pustaka Java menerima vararg. Di JDK, format()metode tersebut didefinisikan sebagai berikut:

 format String statis publik (Lokal l, format String, Objek… args) (// body)

Contoh: format () Method

 class Company ( public static void main(String() args) ( String siteName = "programiz.com"; int empCount = 6; String type = "tutorial website"; System.out.println( String.format( "Site Name : %s, Emp Count: %d Type: %s", siteName, empCount, type ) ); ) )

Saat Anda menjalankan program, hasilnya adalah:

 Nama Situs: programiz.com, Emp Count: 6 Jenis: situs web tutorial 

Bagaimana varargs bekerja di belakang layar?

Mari kita perhatikan kode pseudo berikut:

 public int sumNumber (int… nums) (// metode body)

The sintaks memberitahu compiler Java bahwa metode tersebut dapat disebut dengan nol atau lebih argumen. Akibatnya, variabel nums secara implisit dideklarasikan sebagai array tipe int( ). Jadi, di dalam metode, variabel nums diakses menggunakan sintaks array.

Jika tidak ada argumen, panjang angka adalah 0.

Membebani metode Varargs

Mirip dengan metode umum, Anda dapat membebani metode vararg secara berlebihan.

Bacaan yang Direkomendasikan: Metode Java Overloading

Contoh: Kelebihan Metode Varargs

 class VarargOverload ( private void test(int… args)( int sum = 0; for (int i: args) ( sum += i; ) System.out.println("sum = " + sum); ) private void test(boolean p, String… args)( boolean negate = !p; System.out.println("negate = " + negate); System.out.println("args.length = "+ args.length); ) public static void main( String() args ) ( VarargOverload obj = new VarargOverload(); obj.test(1, 2, 3); obj.test(true, "hello", "world"); ) ) 

Saat Anda menjalankan program, hasilnya adalah:

 jumlah = 6 meniadakan = salah args.length = 2

Dalam program di atas, test()metode dibebani dengan mengubah jumlah argumen yang diterima.

Hal yang perlu diingat saat menggunakan Varargs

Berikut beberapa hal yang harus Anda ingat saat bekerja dengan vargars Java:

1. Saat menentukan tanda tangan metode, selalu pertahankan vararg pada akhirnya.

Argumen variabel harus menjadi argumen terakhir yang diteruskan ke metode. Mari pertimbangkan, Anda memanggil doSomething()metode seperti ini:

 doSomething (1, 2, 3, 4);

Dan, doSomething()metode Anda didefinisikan sebagai:

 // deklarasi metode yang salah public void doSomething (int… nums, int p) (// method body)

Dalam kasus ini, kompilator tidak dapat mengetahui jumlah argumen yang diteruskan ke angka.

Namun, jika Anda mendefinisikan metode Anda sebagai:

 public void doSomething (int p, int… nums) (// method body)

Kompilator Java menetapkan argumen pertama ke p, dan intargumen yang tersisa ditetapkan ke angka.

2. Suatu metode hanya dapat memiliki satu parameter vararg.

Misalnya, deklarasi metode ini salah:

 int doSomething (int p, float… floatNums, double… doubleNums) (// code)

Ambiguitas dalam Metode Varargs overloading

Mari pertimbangkan Anda test()metode kelebihan beban seperti ini:

 kelas Demo (uji void statis (int… vargs) (// metode body) uji void statis (int n, int… vargs) (// metode body))

Dalam program di atas, kompilator menjadi bingung jika Anda mencoba memanggil test()metode meskipun test()metode kelebihan beban dan menerima jumlah argumen yang berbeda.

Kompilator tidak tahu metode mana yang harus dipanggil. Kompilator mungkin berpikir, Anda mencoba memanggil test(int… vargs)dengan satu argumen varargs. Juga, kompilator mungkin berpikir, Anda mencoba memanggil test(int n, int… vargs)dengan argumen yang diteruskan ke parameter pertama dengan parameter kedua kosong.

Karena ada dua kemungkinan, hal itu menyebabkan ambiguitas. Karena itu, terkadang Anda mungkin perlu menggunakan dua nama metode yang berbeda daripada membebani metode varargs.

Artikel yang menarik...