JavaRush /Java Blog /Random-ID /Vararg Java

Vararg Java

Dipublikasikan di grup Random-ID
Hari ini kita akan membahas yang namanya vararg di Java. Varargs - atau Variable Arguments - adalah teknologi yang memungkinkan Anda membuat metode dengan jumlah argumen yang berubah-ubah. Pada artikel ini kita akan mempelajari cara membuat metode seperti itu, membahas mengapa vararg diperlukan dan kapan waktu terbaik untuk menggunakannya.

Apa itu vararg?

Vararg adalah argumen dengan panjang variabel: fitur yang muncul di JDK5. Varargs memungkinkan kita membuat metode dengan jumlah argumen yang berubah-ubah. Pada umumnya, metode seperti itu dapat dibuat sebelumnya. Benar, melakukan ini sangat tidak nyaman. Mari kita beri contoh. Katakanlah kita perlu menulis sebuah metode yang akan mengambil sejumlah argumen bilangan bulat dan menjumlahkannya. Vararg Java - 1Kami memiliki dua pilihan. Opsi 1 - kelebihan beban:
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){...};
}
Namun ada dua masalah dengan kelebihan beban. Pertama, tidak selalu jelas kapan waktunya untuk berhenti, dan kedua, hal ini rumit. Array lebih baik. Opsi 2 - array:
class Calculator {
    int sum(int[] numbers){...};
}
Dengan array, hal ini tidak lagi merepotkan, dan array tampak seperti tidak ada apa-apanya... hingga saatnya memanggil metode:
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);
}
Kami setuju, tentu saja Anda dapat menuliskan semuanya dengan lebih singkat. Namun pertama-tama, saya masih ingin menunjukkan ketidaknyamanan menggunakan array sebagai argumen dengan panjang variabel, dan kedua, meskipun kita menulisnya seperti ini:
int[] arguments = {1,10,123,234,6234,12,8};
int sum = calculator.sum(arguments);
Maka kami tetap tidak akan menghilangkan jumlah kode yang berlebihan. Namun, dengan dirilisnya Java 5, fitur Varargs muncul untuk mengatasi masalah ini. Hal ini memungkinkan untuk meneruskan sejumlah argumen ke metode. Ini terlihat seperti ini:
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();
    }
}
Jadi, mari kita rangkum. Varargs adalah argumen dengan panjang variabel, sebuah fitur yang muncul dengan rilis Java 5. Selanjutnya, kita akan melihat lebih dekat beberapa aturan untuk bekerja dengan Varargs.

5 aturan vararg

Aturan 1. Argumen Vararg (atau argumen panjang variabel/sewenang-wenang) ditandai dengan elipsis sebagai berikut:
String... words
Integer... numbers
Person... people
Cat... cats
Aturan 2. Argumen dengan panjang sembarang hanya dapat ditentukan sebagai argumen untuk beberapa metode:
void print(String... words)
int sum(Integer... numbers)
void save(Person... people)
void feed(Cat... cats)
Aturan 3. Setiap argumen dengan panjang variabel di badan metode adalah array:
void print(String... words){
    for (int i = 0; i < words.length; i++) {
        System.out.println(words[i]);
    }
}
Aturan 4. Argumen Vararg harus menjadi yang terakhir dalam daftar argumen metode:
void print(String... words, String anotherWord) // - Так нельзя!
void print(String... words, int someNumber) // - Так нельзя!

void print(String anotherWord, String... words) // - Так можно
void print(int someNumber, String... words) // - Так можно
Aturan 5: Meskipun vararg adalah array, saat memanggil metode yang menggunakan argumen panjang variabel, tidak perlu membuat array. Cukuplah dan bahkan diinginkan untuk sekadar membuat daftar argumen yang diperlukan, dipisahkan dengan koma:
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]);
        }
    }
}

Contoh vararg

Pada contoh di bawah ini, kita akan menulis sebuah metode yang mengambil varargs yang terdiri dari bilangan bulat dan menampilkan jumlah elemen yang dilewati dan jumlahnya. Mari kita meneruskan array dan serangkaian bilangan bulat ke metode ini (kedua opsi valid):
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);
}
Setelah dijalankan, program akan menampilkan output:

Кол-во элементов для сложения - 100, сумма - 4950 
Кол-во элементов для сложения - 10, сумма - 55 
Perlu disebutkan bahwa metode ini System.out.printfjuga menerima varargs. Jika kita melihat kode metode ini, kita akan melihat ini:
public PrintStream printf(String format, Object ... args) {
    return format(format, args);
}
Metode lain yang banyak digunakan dalam menerima varag adalah String.format. Kodenya ditunjukkan di bawah ini:
public static String format(String format, Object... args) {
    return new Formatter().format(format, args).toString();
}

Kapan menggunakan vararg?

Jawaban atas pertanyaan ini tergantung pada siapa yang bertanya. Jika pertanyaan serupa ditanyakan oleh klien dari beberapa API yang memiliki metode dengan varargs, maka jawabannya adalah “gunakan metode tersebut sesering mungkin.” Untuk klien kode, varargs membuat hidup lebih mudah dengan membuat kode lebih mudah ditulis dan lebih mudah dibaca. Namun, jika pertanyaan ini ditanyakan oleh pengembang API yang bertanya-tanya seberapa sering Anda harus membuat metode dengan varargs, maka jawabannya adalah “Anda tidak boleh sering menggunakan varargs.” Vararg hanya boleh digunakan jika manfaat penggunaannya sudah jelas. Anda juga harus menghindari metode yang kelebihan beban dengan varargs, karena ini akan menyulitkan klien kode Anda untuk memahami metode kelebihan beban mana yang sebenarnya dipanggil.

Kesimpulan

Jadi, kita telah membahas topik lain, vararg di Java. Kami menemukan apa itu. Kami menjelaskan aturan untuk menggunakan varargs. Kami melihat contoh metode dengan argumen panjang sewenang-wenang, dan juga membahas kapan lebih baik menggunakan varargs dan kapan lebih baik tidak menggunakannya. Sebagai pekerjaan rumah, Anda dapat menerapkan cara berikut:
  • Tulis voidmetode yang mengambil serangkaian bilangan bulat dan mengembalikan mean aritmatikanya.
  • Tulis voidmetode yang mengambil serangkaian string dan mencetak kata terpanjang.
  • Tulis metode yang mengembalikan booleandan mengambil variabel bertipe sebagai argumen pertama String, dan serangkaian booleanpanjang variabel sebagai argumen berikutnya.
    Nilai yang mungkin Stringadalah AND, OR, XOR. Jika argumen pertama memiliki nilai lain, metode harus mengeluarkan pengecualian IllegalArgumentException.
    Metode harus melakukan operasi logis (ditentukan dalam argumen pertama) pada setiap elemen argumen varargs dan mengembalikan hasil perhitungan.
Contoh argumen dan hasil:
  • "DAN", benar, benar, salah - akan menghasilkan salah
  • "ATAU", salah, benar, salah, salah - akan mengembalikan nilai benar
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION