JavaRush /جاوا بلاگ /Random-UR /جاوا ورارگز

جاوا ورارگز

گروپ میں شائع ہوا۔
آج ہم جاوا میں varargs جیسی چیز پر بات کریں گے۔ Varargs - یا Variable Arguments - ایک ایسی ٹیکنالوجی ہے جو آپ کو دلائل کی من مانی تعداد کے ساتھ طریقے بنانے کی اجازت دیتی ہے۔ اس آرٹیکل میں، ہم سیکھیں گے کہ اس طرح کے طریقے کیسے بنائے جائیں، اس بات پر بات کریں گے کہ ورارگز کی ضرورت کیوں ہے اور انہیں کب استعمال کرنا بہتر ہے۔

ورارگس کیا ہیں؟

Varargs متغیر لمبائی کے دلائل ہیں: ایک خصوصیت جو JDK5 میں نمودار ہوئی۔ Varargs ہمیں دلائل کی صوابدیدی تعداد کے ساتھ طریقے بنانے کی اجازت دیتا ہے۔ بڑے پیمانے پر، اس سے پہلے اس طرح کے طریقے بنانا ممکن تھا۔ سچ ہے، ایسا کرنا بہت آسان نہیں تھا۔ آئیے ایک مثال دیتے ہیں۔ ہم کہتے ہیں کہ ہمیں ایک ایسا طریقہ لکھنے کی ضرورت ہے جو انٹیجر آرگیومینٹس کی صوابدیدی تعداد لے اور ان کو ایک ساتھ جوڑے۔ جاوا ورارگز - 1ہمارے پاس دو آپشن ہیں۔ آپشن 1 - اوورلوڈ:
class Calculator {
    int sum(int a, int b){...};
    int sum(int a, int b, int c){...};
    int sum(int a, int b, int c, int d){...};
    int sum(int a, int b, int c, int d, int e){...};
}
لیکن اوور لوڈنگ کے ساتھ دو مسائل ہیں۔ اول، یہ ہمیشہ واضح نہیں ہوتا کہ یہ کب رکنا ہے، اور دوم، یہ بوجھل ہے۔ صفیں بہتر ہیں۔ آپشن 2 - صفیں:
class Calculator {
    int sum(int[] numbers){...};
}
ایک صف کے ساتھ یہ اب بوجھل نہیں ہے، اور ایسا لگتا ہے کہ صف کچھ بھی نہیں لگتی ہے... جب تک کہ طریقہ کو کال کرنے کا وقت نہ ہو:
public static void main(String... sss) {
    Calculator calculator = new Calculator();

    int[] arguments = new int[7];
    arguments[0] = 1;
    arguments[1] = 10;
    arguments[2] = 123;
    arguments[3] = 234;
    arguments[4] = 6234;
    arguments[5] = 12;
    arguments[6] = 8;

    int sum = calculator.sum(arguments);
}
ہم متفق ہیں، آپ یقیناً ہر چیز کو مزید مختصراً لکھ سکتے ہیں۔ لیکن سب سے پہلے، میں اب بھی arrays کو متغیر کی لمبائی کے دلائل کے طور پر استعمال کرنے کی تکلیف کا مظاہرہ کرنا چاہوں گا، اور دوسری بات، یہاں تک کہ اگر ہم اسے اس طرح لکھیں:
int[] arguments = {1,10,123,234,6234,12,8};
int sum = calculator.sum(arguments);
تب بھی ہم کوڈ کی ضرورت سے زیادہ مقدار سے چھٹکارا نہیں ملے گا۔ تاہم، جاوا 5 کے اجراء کے ساتھ، ورارگس کی خصوصیت ان مسائل کو حل کرتی نظر آئی۔ اس نے طریقوں پر دلائل کی ایک من مانی تعداد کو منتقل کرنا ممکن بنایا۔ یہ کچھ اس طرح لگتا ہے:
public class Calculator {
    public static void main(String... sss) {
        Calculator calculator = new Calculator();
        int sum = calculator.sum(1,10,123,234,6234,12,8);
    }
    int sum(int... numbers){
       return Arrays.stream(numbers).sum();
    }
}
تو، آئیے خلاصہ کرتے ہیں۔ Varargs متغیر طوالت کے دلائل ہیں، ایک خصوصیت جو جاوا 5 کی ریلیز کے ساتھ نمودار ہوئی۔ اگلا، ہم Varargs کے ساتھ کام کرنے کے لیے کچھ اصولوں پر گہری نظر ڈالیں گے۔

ورارگس کے 5 اصول

قاعدہ 1. Vararg دلیل (یا متغیر/منصوبہ بندی کی لمبائی کی دلیل) کو بیضوی طور پر مندرجہ ذیل طور پر ظاہر کیا جاتا ہے:
String... words
Integer... numbers
Person... people
Cat... cats
قاعدہ 2۔ صوابدیدی طوالت کی دلیل کو صرف کسی طریقہ کی دلیل کے طور پر بیان کیا جا سکتا ہے:
void print(String... words)
int sum(Integer... numbers)
void save(Person... people)
void feed(Cat... cats)
قاعدہ 3۔ طریقہ کار میں اس طرح کی ہر متغیر لمبائی کی دلیل ایک صف ہے:
void print(String... words){
    for (int i = 0; i < words.length; i++) {
        System.out.println(words[i]);
    }
}
قاعدہ 4۔ طریقہ دلیل کی فہرست میں Vararg کی دلیل آخری ہونی چاہیے:
void print(String... words, String anotherWord) // - Так нельзя!
void print(String... words, int someNumber) // - Так нельзя!

void print(String anotherWord, String... words) // - Так можно
void print(int someNumber, String... words) // - Так можно
قاعدہ 5: اگرچہ varargs arrays ہیں، جب کسی ایسے طریقہ کو کال کرتے ہیں جو متغیر کی لمبائی کے دلائل لیتا ہے، تو یہ ضروری نہیں ہے کہ ایک سرنی بنائی جائے۔ مطلوبہ دلائل کو صرف کوما سے الگ کر کے درج کرنا کافی اور یہاں تک کہ مطلوبہ ہے:
public class Main {
    public static void main(String... sss) {
        print("How","же","прекрасно","изучать","Java");
    }

    static void print(String... words){
        for (int i = 0; i < words.length; i++) {
            System.out.println(words[i]);
        }
    }
}

ورارگس کی مثالیں۔

ذیل کی مثال میں، ہم ایک طریقہ لکھیں گے جو عدد پر مشتمل varargs لیتا ہے اور گزرے ہوئے عناصر کی تعداد اور ان کا مجموعہ دکھاتا ہے۔ آئیے اس طریقہ میں ایک صف اور عدد کی ایک سیریز دونوں کو پاس کریں (دونوں آپشنز درست ہیں):
public static void main(String... sss) {
    int[] a = new int[100];
    for (int i = 0; i < a.length; i++) {
        a[i] = i;
    }

    sum(a);
    sum(1,2,3,4,5,6,7,8,9,10);
}

static void sum(int... numbers){
    final int length = numbers.length;
    final int sum = Arrays.stream(numbers).sum();
    final String lineSeparator = System.lineSeparator();

    System.out.printf("Кол-во элементов для сложения - %d, сумма - %d%s", length, sum, lineSeparator);
}
پروگرام چلانے کے بعد آؤٹ پٹ ہوگا:

Кол-во элементов для сложения - 100, сумма - 4950 
Кол-во элементов для сложения - 10, сумма - 55 
یہ بات قابل ذکر ہے کہ طریقہ System.out.printfvarargs کو بھی قبول کرتا ہے۔ اگر ہم اس طریقہ کار کے کوڈ کو دیکھیں تو ہم یہ دیکھیں گے:
public PrintStream printf(String format, Object ... args) {
    return format(format, args);
}
ایک اور وسیع پیمانے پر استعمال شدہ طریقہ جو varags کو قبول کرتا ہے String.format۔ اس کا کوڈ ذیل میں دکھایا گیا ہے:
public static String format(String format, Object... args) {
    return new Formatter().format(format, args).toString();
}

varargs کب استعمال کریں؟

اس سوال کا جواب اس پر منحصر ہے کہ کون پوچھ رہا ہے۔ اگر اسی طرح کا سوال کچھ API کے کلائنٹ کے ذریعہ پوچھا جاتا ہے جس میں varargs کے ساتھ طریقے ہیں، تو جواب ہوگا "اس طرح کے طریقوں کو جتنی بار ممکن ہو استعمال کریں۔" کوڈ کلائنٹ کے لیے، varargs کوڈ لکھنے میں آسان اور پڑھنے کے قابل بنا کر زندگی کو بہت آسان بنا دیتا ہے۔ تاہم، اگر یہ سوال کسی API ڈویلپر سے پوچھا جاتا ہے جو یہ سوچ رہا ہے کہ آپ کو varargs کے ساتھ کتنی بار طریقے بنانا چاہیے، تو جواب ہوگا "آپ کو varargs کا اکثر استعمال نہیں کرنا چاہیے۔" Varargs صرف اس وقت استعمال کرنا چاہئے جب اس کے استعمال کا فائدہ واضح ہو۔ آپ کو varargs کے ساتھ اوورلوڈنگ کے طریقوں سے بھی گریز کرنا چاہیے، کیونکہ اس سے آپ کے کوڈ کے کلائنٹس کے لیے یہ سمجھنا مشکل ہو جائے گا کہ اوورلوڈ شدہ طریقوں میں سے کس کو اصل میں کہا جاتا ہے۔

نتیجہ

تو، ہم نے جاوا میں ایک اور موضوع کا احاطہ کیا ہے۔ ہم نے سوچا کہ یہ کیا ہے۔ ہم نے varargs استعمال کرنے کے اصول بیان کیے ہیں۔ ہم نے صوابدیدی طوالت کے دلائل کے ساتھ طریقوں کی مثالوں کو دیکھا، اور اس پر بھی تبادلہ خیال کیا کہ varargs کا استعمال کب بہتر ہے اور کب ان کے استعمال سے گریز کرنا بہتر ہے۔ ہوم ورک کے طور پر، آپ درج ذیل طریقوں کو لاگو کر سکتے ہیں:
  • voidایسا طریقہ لکھیں جو عدد کی ایک سیریز لے اور ان کے حسابی اوسط کو واپس کرے۔
  • voidایسا طریقہ لکھیں جو تاروں کی ایک سیریز لے اور سب سے لمبا لفظ پرنٹ کرے۔
  • ایک ایسا طریقہ لکھیں جو واپس آئے booleanاور قسم کے متغیر کو پہلی دلیل کے طور پر لے ، اور اگلی دلیل کے طور پر متغیر کی لمبائی کی Stringایک سیریز ۔ ممکنہ قدریں ہیں , , . اگر پہلی دلیل کی کوئی اور قدر ہے، تو طریقہ کو ایک استثناء دینا چاہیے ۔ طریقہ کار کو varargs دلیل کے ہر عنصر پر ایک منطقی آپریشن (پہلی دلیل میں بیان کیا گیا ہے) کرنا چاہیے اور حساب کا نتیجہ واپس کرنا چاہیے۔boolean
    StringANDORXORIllegalArgumentException
مثال کے دلائل اور نتیجہ:
  • "اور"، سچا، سچا، غلط - غلط واپس آئے گا۔
  • "یا"، جھوٹے، سچے، جھوٹے، جھوٹے - سچے لوٹ جائیں گے۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION