آرگومان های متغیر (VarArgs)

آرگومان‌های متغیر (VarArgs)، در JDK 5 اضافه شده است و به شما اجازه می‌دهد، تعداد آرگومان‌های دلخواه (متغیر) و البته همنوع را به تابع ارسال کنید. برای ایجاد تابعی که به تعداد دلخواه پارامتر دریافت کند، از کلمه vararg به صورت زیر استفاده می‌شود :

fun functionName(vararg argument: dataType) 
{
    // function body
}

به مثال زیر توجه کنید :

  1:  fun calculateSum(vararg numbers: Int): Int
  2:  {
  3:     var total = 0
  4: 
  5:     for (number in numbers) 
  6:     {
  7:         total += number
  8:     }
  9: 
 10:     return total
 11: }
 12: 
 13: fun main(args: Array<String>)
 14: {
 15:     println("1 + 2 + 3 = " + calculateSum(1, 2, 3))
 16:     println("1 + 2 + 3 + 4 = " + calculateSum(1, 2, 3, 4))
 17:     println("1 + 2 + 3 + 4 + 5 = " + calculateSum(1, 2, 3, 4, 5))
 18: }
1 + 2 + 3 = 6
1 + 2 + 3 + 4 = 10
1 + 2 + 3 + 4 + 5 = 15

همانطور که در مثال بالا مشاهده می‌کنید، یک تابع به نام ()calculateSum در خط 3 تعریف شده است. برای اینکه این تابع تعداد دلخواه پارامتر دریافت کند، از کلمه vararg استفاده شده است. در اصل کلمه numbers یک آرایه است، که وقتی ما آرگومان‌ها را به تابع ارسال می‌کنیم، در این آرایه ذخیره می‌شوند. حال تابع را سه بار با تعداد مختلف آرگومانها فراخوانی می‌کنیم و سپس با استفاده از حلقه for این آرگومانها را جمع و به تابع فراخوان برگشت می‌دهیم. وقتی از چندین پارامتر در یک تابع استفاده می‌کنید، فقط یکی از آنها باید دارای کلمه vararg بوده و همچنین از لحاظ مکانی باید آخرین پارامتر باشد. اگر این پارامتر، در آخر پارامترهای دیگر قرار نگیرد و یا از چندین پارامتر دارای کلمه vararg استفاده کنید، با خطا مواجه می‌شوید. به مثالهای اشتباه و درست زیر توجه کنید :

fun someFunction(vararg x: Int, vararg y: Int) //ERROR

fun someFunction(vararg x: Int, y: Int, z: Int) //ERROR

fun someFunction(x: Int, y: Int, vararg z: Int) //Correct