Dina iki kita bakal ngrembug bab kayata varargs ing Jawa. Varargs - utawa Variabel Argumen - minangka teknologi sing ngidini sampeyan nggawe metode kanthi jumlah argumen sing sewenang-wenang. Ing artikel iki, kita bakal sinau babagan carane nggawe metode kasebut, ngrembug kenapa varargs dibutuhake lan nalika luwih becik digunakake.
Apa varargs?
Varargs minangka argumen dawa variabel: fitur sing muncul ing JDK5. Varargs ngidini kita nggawe metode kanthi jumlah argumen sing sewenang-wenang. Umume, bisa nggawe cara kasebut sadurunge. Bener, nindakake iki ora trep banget. Ayo menehi conto. Contone, kita kudu nulis metode sing bakal njupuk nomer argumen integer sing kasepakatan lan ditambahake. Kita duwe rong pilihan. Pilihan 1 - kakehan: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){...};
}
Nanging ana rong masalah karo overloading. Kaping pisanan, ora mesthi jelas kapan wektune mandheg, lan nomer loro, angel. Arrays luwih apik. Pilihan 2 - array:
class Calculator {
int sum(int[] numbers){...};
}
Kanthi larik iku ora rumit maneh, lan larik katon kaya apa-apa ... nganti wektune nelpon cara:
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);
}
Kita setuju, sampeyan bisa, mesthi, nulis kabeh luwih ringkes. Nanging sing sepisanan, aku isih pengin nuduhake rasa ora nyaman nggunakake array minangka argumen dawa variabel, lan nomer loro, sanajan kita nulis kaya iki:
int[] arguments = {1,10,123,234,6234,12,8};
int sum = calculator.sum(arguments);
Banjur kita isih ora bakal nyingkirake jumlah kode sing akeh banget. Nanging, kanthi rilis Java 5, fitur Varargs katon kanggo ngatasi masalah kasebut. Iki ngidini kanggo ngirim sawetara argumen sing sewenang-wenang menyang metode. Iku katon kaya iki:
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();
}
}
Dadi, ayo ngringkes. Varargs minangka argumen dawa variabel, fitur sing muncul karo release Java 5. Sabanjure, kita bakal nliti sawetara aturan kanggo nggarap Varargs.
5 aturan varargs
Aturan 1. Argumen Vararg (utawa variabel/argumen dawa arbitrer) dituduhake kanthi elipsis kaya ing ngisor iki:String... words
Integer... numbers
Person... people
Cat... cats
Aturan 2. Argumentasi kanthi dawa sewenang-wenang mung bisa ditemtokake minangka argumen kanggo sawetara cara:
void print(String... words)
int sum(Integer... numbers)
void save(Person... people)
void feed(Cat... cats)
Aturan 3. Saben argumen variabel-dawa ing awak metode yaiku array:
void print(String... words){
for (int i = 0; i < words.length; i++) {
System.out.println(words[i]);
}
}
Aturan 4. Argumen Vararg kudu sing pungkasan ing dhaptar 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: Sanajan varargs minangka array, nalika nelpon metode sing njupuk argumen dawa variabel, ora perlu nggawe array. Cukup lan malah dikarepake kanggo dhaptar argumen sing dibutuhake sing dipisahake karo 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]);
}
}
}
Tuladha varargs
Ing conto ing ngisor iki, kita bakal nulis cara sing njupuk varargs sing dumadi saka integer lan nampilake jumlah unsur sing dilewati lan jumlahe. Ayo lebokake array lan seri integer menyang metode iki (pilihan loro kasebut sah):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);
}
Sawise mbukak program bakal output:
Кол-во элементов для сложения - 100, сумма - 4950
Кол-во элементов для сложения - 10, сумма - 55
Perlu dicathet yen metode kasebut System.out.printf
uga nampa varargs. Yen kita ndeleng kode metode iki, kita bakal weruh iki:
public PrintStream printf(String format, Object ... args) {
return format(format, args);
}
Cara liya sing akeh digunakake sing nampa varags yaiku String.format
. Kode kasebut ditampilake ing ngisor iki:
public static String format(String format, Object... args) {
return new Formatter().format(format, args).toString();
}
Nalika nggunakake varargs?
Jawaban kanggo pitakonan iki gumantung marang sing takon. Yen pitakonan sing padha ditakoni dening klien saka sawetara API sing duwe metode karo varargs, banjur jawabane "nggunakake cara kasebut kanthi asring." Kanggo klien kode, varargs nggawe urip luwih gampang kanthi nggawe kode luwih gampang ditulis lan bisa diwaca. Nanging, yen pitakonan iki ditakoni dening pangembang API sing kepingin weruh sepira kerepe sampeyan kudu nggawe metode karo varargs, banjur jawabane "sampeyan ora kudu kerep nggunakake varargs." Varargs mung kudu digunakake nalika entuk manfaat saka nggunakake wis ketok. Sampeyan uga kudu ngindhari cara overloading karo varargs, amarga iki bakal nggawe angel kanggo klien kode sampeyan ngerti endi metode sing kakehan sing diarani.Kesimpulan
Dadi, kita wis nutupi topik liyane, varargs ing Jawa. We figured metu apa iku. Kita nerangake aturan kanggo nggunakake varargs. Kita ndeleng conto metode kanthi argumen dawa sing sewenang-wenang, lan uga ngrembug nalika luwih becik nggunakake varargs lan nalika luwih becik ora nggunakake. Minangka peer, sampeyan bisa nindakake cara ing ngisor iki:- Tulis
void
cara sing njupuk seri wilangan bulat lan ngasilake rata-rata aritmetika. - Tulis
void
cara sing njupuk seri strings lan prints tembung paling dawa. - Tulis cara sing ngasilake
boolean
lan njupuk variabel jinis minangka argumen pisananString
, lan seriboolean
variabel dawa minangka argumen sabanjure.
Nilai sing bisa ditindakakeString
yaikuAND
,OR
,XOR
. Yen argumen pisanan duwe nilai liyane, metode kasebut kudu mbuwang pengecualianIllegalArgumentException
.
Cara kasebut kudu nindakake operasi logis (ditemtokake ing argumen pisanan) ing saben unsur argumen varargs lan ngasilake asil pitungan.
- "Lan", bener, bener, salah - bakal bali palsu
- "UTAWA", salah, bener, salah, salah - bakal bali bener
GO TO FULL VERSION