JavaRush /Java блогы /Random-KK /Java бараргтары

Java бараргтары

Топта жарияланған
Бүгін біз Java тіліндегі varargs сияқты нәрсені талқылаймыз. Varargs - немесе Variable Arguments - бұл аргументтердің ерікті саны бар әдістерді жасауға мүмкіндік беретін технология. Бұл мақалада біз мұндай әдістерді қалай жасау керектігін үйренеміз, вараргтардың не үшін қажет екенін және оларды қашан қолданған дұрыс екенін талқылаймыз.

Вараргтар дегеніміз не?

Вараргтар - айнымалы ұзындықтағы аргументтер: JDK5-те пайда болған мүмкіндік. Varargs бізге аргументтердің ерікті саны бар әдістерді жасауға мүмкіндік береді. Жалпы алғанда, мұндай әдістерді бұрын жасауға болатын. Рас, мұны істеу өте ыңғайлы болмады. Мысал келтірейік. Бүтін аргументтердің ерікті санын алып, оларды қосатын әдісті жазуымыз керек делік. Java 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);
}
Біз келісеміз, сіз, әрине, бәрін қысқаша жаза аласыз. Бірақ біріншіден, массивтерді айнымалы ұзындықтағы аргументтер ретінде пайдаланудың ыңғайсыздығын көрсеткім келеді, екіншіден, оны былай жазсақ та:
int[] arguments = {1,10,123,234,6234,12,8};
int sum = calculator.sum(arguments);
Сонда біз әлі де шамадан тыс code көлемінен арылмаймыз. Дегенмен, Java 5 шығарылымымен Varargs мүмкіндігі бұл мәселелерді шешу үшін пайда болды. Бұл әдістерге аргументтердің ерікті санын беруге мүмкіндік берді. Бұл келесідей көрінеді:
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 — айнымалы ұзындықтағы аргументтер, бұл мүмкіндік Java 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 массив болса да, айнымалы ұзындықтағы аргументтерді қабылдайтын әдісті шақырғанда, массив жасау қажет емес. Үтірмен бөлінген қажетті аргументтерді жай ғана тізімдеу жеткілікті және тіпті қажет:
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]);
        }
    }
}

Vararg мысалдары

Төмендегі мысалда біз бүтін сандардан тұратын вараргтарды қабылдайтын және өткен элементтердің санын және олардың қосындысын көрсететін әдісті жазамыз. Бұл әдіске массивті де, бүтін сандар қатарын да берейік (екі опция да жарамды):
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.printfвараргтарды да қабылдайды. Бұл әдістің codeын қарасақ, мынаны көреміз:
public PrintStream printf(String format, Object ... args) {
    return format(format, args);
}
Варагтарды қабылдайтын тағы бір кеңінен қолданылатын әдіс String.format. Оның codeы төменде көрсетілген:
public static String format(String format, Object... args) {
    return new Formatter().format(format, args).toString();
}

Varargs қашан қолданылады?

Бұл сұрақтың жауабы кім сұрайтынына байланысты. Егер ұқсас сұрақты vararg әдістері бар кейбір API клиенті қойса, жауап «мұндай әдістерді мүмкіндігінше жиі қолданыңыз». Код клиенті үшін varargs codeты жазуды және оқуды жеңілдету арқылы өмірді айтарлықтай жеңілдетеді. Алайда, егер бұл сұрақты varargs көмегімен әдістерді қаншалықты жиі жасау керектігі туралы сұрақ қойған API әзірлеушісі сұраса, жауап «сіз varargs жиі пайдаланбауыңыз керек» болады. Varargs оны қолданудың пайдасы айқын болғанда ғана қолданылуы керек. Сондай-ақ, varargs көмегімен әдістерді шамадан тыс жүктеуден аулақ болуыңыз керек, себебі бұл сіздің codeыңыздың клиенттеріне шамадан тыс жүктелген әдістердің қайсысы шынымен шақырылғанын түсінуді қиындатады.

Қорытынды

Сонымен, біз Java тіліндегі varargs деген тағы бір тақырыпты қарастырдық. Біз оның не екенін анықтадық. Біз vararg қолдану ережелерін сипаттадық. Біз ерікті ұзындық аргументтері бар әдістердің мысалдарын қарастырдық, сонымен қатар вараргтарды қашан қолданған дұрыс және оларды пайдаланудан қашан бас тартқан дұрыс деп талқыладық. Үй тапсырмасы ретінде келесі әдістерді орындауға болады:
  • voidБүтін сандар қатарын алатын және олардың орташа арифметикалық мәнін беретін әдісті жазыңыз .
  • voidЖолдар қатарын алатын және ең ұзын сөзді басып шығаратын әдісті жазыңыз .
  • booleanБірінші аргумент ретінде түрдегі айнымалыны және келесі аргумент ретінде айнымалы ұзындық Stringқатарын қайтаратын және қабылдайтын әдісті жазыңыз . Мүмкін мәндер , , . Бірінші аргументте басқа мән болса, әдіс ерекше жағдайды шығаруы керек . Әдіс varargs аргументінің әрбір элементінде логикалық операцияны (бірінші аргументте көрсетілген) орындауы және есептеу нәтижесін қайтаруы керек.boolean
    StringANDORXORIllegalArgumentException
Аргументтер мен нәтиже мысалдары:
  • «ЖӘНЕ», ақиқат, ақиқат, жалған – жалғанды ​​қайтарады
  • «НЕМЕСЕ», false, true, false, false - ақиқат қайтарады
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION