Selain named dan default argument, Kotlin juga memiliki vararg (variable argument). Dengan menggunakan kata kunci vararg kita juga bisa menyederhanakan beberapa parameter yang memiliki tipe data yang sama menjadi parameter tunggal.

Dengan  vararg sebuah fungsi dapat memiliki jumlah parameter berdasarkan jumlah argumen yang kita masukkan ketika fungsi tersebut dipanggil. Contoh dari penggunaan vararg adalah sebagai berikut:

1. fun sumNumbers(vararg number: Int): Int { 2.     return number.sum() 3. }

Bisa kita perhatikan pada contoh kode di atas bahwa kata kunci vararg ditempatkan sebelum nama parameter. Ketika ingin memanggil fungsi tersebut, kita bisa melampirkan beberapa argumen, misal seperti berikut:

1. fun main() { 2.     val number = sumNumbers(10, 20, 30, 40) 3.     print(number) 4. } 5.   6. fun sumNumbers(vararg number: Int): Int { 7.     return number.sum() 8. } 9.   10. /* 11.    output : 100 12. */

Selain itu kita juga bisa menerapkan Generic untuk tipe parameter ketika parameter tersebut ditentukan dengan vararg. Contohnya seperti berikut:

1. fun <T> asList(vararg input: T): List<T> { 2.     val result = ArrayList<T>() 3.     for (item in input) 4.         result.add(item) 5.     return result 6. }

Ketika sebuah parameter ditentukan dengan vararg, pada dasarnya semua argumen yang dilampirkan, ditampung di dalam sebuah Array <out T>. Contohnya bisa kita lihat pada contoh kode di atas.

Karena pada dasarnya adalah sebuah Array, maka kita bisa memanggil fungsi atau properti yang tersedia pada kelas Array dari dalam fungsi tersebut. Misal properti size:

1. fun main() { 2.     val number = getNumberSize(10, 20, 30, 40, 50) 3.     print(number) 4. } 5.   6. fun getNumberSize(vararg number: Int): Int { 7.     return number.size 8. } 9.   10. /* 11.    output : 5 12. */

Lalu kapan kita membutuhkan vararg?  Ketika sebuah fungsi yang menggunakannya tidak mengetahui jumlah argumen yang akan disematkan ketika fungsi tersebut dipanggil. Contoh penerapan bisa kita liat pada fungsi String.format(),  di mana fungsi tersebut terdapat parameter yang ditandai dengan vararg dan dapat disematkan beberapa argumen tanpa harus tahu batasannya.

Aturan pada Vararg Arguments

Dalam penggunaannya, terdapat aturan yang perlu kita ketahui. Pertama, di dalam sebuah fungsi, tidak diizinkan untuk memiliki 2 (dua) parameter bertanda vararg.

1. fun sumNumbers(vararg number: Int, vararg number2: Int)

Ketika kode di atas dijalankan, proses kompilasi akan gagal dengan log eror sebagai berikut:Kotlin: Multiple vararg-parameters are prohibited

Selanjutnya jika kita ingin menambahkan parameter baru tanpa kata kunci vararg, parameter yang ditandai dengan vararg sebaiknya berada pada posisi terakhir. Contohnya seperti berikut:

1. fun main() { 2. sets("Kotlin", 10, 10) 3. } 4.   5. fun sets(name: String, vararg number: Int): Int { 6.     ... 7. }

Lalu bagaimana jika kita ingin menempatkan parameter yang ditandai vararg bukan pada posisi pertama? Kita bisa mendefinisikannya secara langsung. Namun berbeda saat fungsi tersebut dipanggil di mana kita harus menggunakan named argument saat ingin melampirkan argumen untuk parameter yang tidak ditandai dengan vararg. Contohnya seperti berikut:

1. fun main() { 2.     sets(10, 10, name = "Kotlin") 3. } 4.   5. fun sets(vararg number: Int, name: String): Int { 6.     ... 7. }