در مثال زیر میتوانید نحوهی استفاده از Varargs را مشاهده کنید.
import java.io.*;
class Geeks {
// متدی که تعداد متغیری از آرگومانهای نوع رشته میپذیرد
public static void Names(String... n) {
// چاپ هر نام
for (String i : n) {
System.out.print(i + " ");
}
System.out.println();
}
public static void main(String[] args) {
// فراخوانی متد 'n' با تعداد مختلفی آرگومان
Names("geek1", "geek2"); // خروجی: geek1 geek2
Names("geek1", "geek2", "geek3"); // خروجی: geek1 geek2 geek3
}
}
در مثال بالا، String... names به متد این امکان را میدهد که تعداد متغیری از آرگومانهای نوع String را دریافت کند. داخل متد، names را در یک حلقه قرار داده و آن را چاپ کردهایم. این متد دو بار در متد main فراخوانی شدهاست، یکی با دو آرگومان و دیگری با سه آرگومان.
ساختار Varargs
در داخل متدهای Varargs، این ویژگی با استفاده از مفهوم آرایههای یکبعدی پیادهسازی میشود. به این معنا که آرگومانهای ورودی به متد، بهصورت یک آرایه از نوع مشخص ذخیره میشوند. در متد Varargs، میتوانیم آرگومانها را از طریق اندیسها (Index) تفکیک کنیم. برای تعریف متدی که از Varargs استفاده میکند، باید از سه نقطه (...) استفاده کنیم.
public static void fun(int … a){
// بدنه متد
}
در اینجا، متد fun یک آرایه یکبعدی از نوع int بهعنوان ورودی دریافت میکند. این ساختار، ایجاد متدهایی که نیاز به پذیرش تعداد متغیر آرگومانها دارند را سادهتر میکند.
چرا Varargs در جاوا ضروری شد؟
قبل از JDK 5، نمیتوانستیم متدی با تعداد متغیر آرگومانها تعریف کنیم. اگر تعداد آرگومانها تغییر میکرد، باید متد جدیدی تعریف میکردیم که باعث افزایش طول کد و کاهش خوانایی میشد. قبل از JDK 5، دو روش برای مدیریت آرگومانهای متغیر وجود داشت: استفاده از overloading (تعریف چند متد با آرگومانهای مختلف) یا قرار دادن آرگومانها در یک آرایه و ارسال آن به متد. هر دو روش مستعد خطا و نیازمند کد بیشتر بودند. برای حل این مشکلات، ویژگی Varargs در JDK 5 معرفی شد. از آن زمان، میتوانیم متدی با تعداد متغیر آرگومانها تعریف کنیم که باعث سادهتر شدن کد میشود.نکات مهم در تعریف متدهای Varargs
محدودیت در تعداد Varargs
در یک متد فقط میتوانید یک بار از Varargs استفاده کنید. در صورتی که بخواهید از دو Varargs در یک متد استفاده کنید، با خطای کامپایل مواجه خواهید شد. مثلاً:
void method(String... gfg, int... q) {
// خطای زمان کامپایل به دلیل وجود دو Varargs
}
موقعیت Varargs باید آخرین پارامتر باشد
در زمان تعریف متدهایی که از Varargs استفاده میکنند، باید اطمینان حاصل کنید که Varargs آخرین پارامتر باشد. در غیر این صورت، با خطای کامپایل مواجه خواهید شد. برای درک بهتر به مثال زیر توجه کنید.
// varargs همراه با آرگومانهای معمولی
class Test2 {
// دریافت یک رشته به عنوان آرگومان
// و سپس varargs از نوع int
static void fun2(String s, int... a) {
System.out.println("String: " + s); // چاپ رشته ورودی
System.out.println("تعداد آرگومانها: " + a.length); // چاپ تعداد آرگومانهای ورودی
// استفاده از حلقه for-each برای نمایش محتویات آرگومانها
for (int i : a)
System.out.print(i + " "); // چاپ هر عدد
System.out.println(); // چاپ خط جدید برای جدا کردن خروجیها
}
public static void main(String args[])
{
// فراخوانی fun2() با آرگومانهای مختلف
fun2("GeeksforGeeks", 100, 200);
fun2("CSPortal", 1, 2, 3, 4, 5);
fun2("forGeeks");
}
}
String: GeeksforGeeks
Number of arguments is: 2
100 200
String: CSPortal
Number of arguments is: 5
1 2 3 4 5
String: forGeeks
Number of arguments is: 0
استفاده از ویژگیهای آرایه یکبعدی
Varargs در واقع یک آرایه یکبعدی است، شما میتوانید از ویژگیهای مختلف آرایهها برای پردازش آرگومانها استفاده کنید. این ویژگیها شامل دسترسی به مقادیر با استفاده از ایندکسها (Indexes)، استفاده از حلقهها و ... است. برای مثال:
class Test1 {
// متدی که تعداد متغیر آرگومانهای عددی صحیح میگیرد
static void fun(int... a)
{
// چاپ تعداد آرگومانهای ورودی
System.out.println("تعداد آرگومانها: "
+ a.length);
// استفاده از حلقه for-each برای نمایش محتوای آرگومانها
for (int i : a)
System.out.print(i + " ");
System.out.println();
}
// کد اصلی
public static void main(String args[])
{
// فراخوانی متد Varargs با یک پارامتر
fun(100);
// فراخوانی متد Varargs با چهار پارامتر
fun(1, 2, 3, 4);
// فراخوانی متد Varargs بدون پارامتر
fun();
}
}
Number of arguments: 1
100
Number of arguments: 4
1 2 3 4
Number of arguments: 0
نتیجهگیری
فقط یک بار میتوان از Varargs در یک متد استفاده کرد.
باید Varargs آخرین پارامتر در متد باشد.
ورود و ثبت نام برای ارسال نظر وارد شوید