Örneklerle Java Varargs (Değişken Argümanlar)

Bu makalede, örnekler yardımıyla Java'daki vararglar hakkında bilgi edineceksiniz. Ayrıca vararjları ne zaman kullanacağınızı ve ne zaman kullanmayacağınızı da öğreneceksiniz.

Java'da varargs nedir?

Bir Java yöntemi oluşturduğunuzu varsayalım. Ancak, yönteminizin kaç argümanı kabul edeceğinden emin değilsiniz. Bu sorunu çözmek için, Java 1.5 varargları tanıttı.

Varargs, değişken argümanlar için kısa bir isimdir. Java'da, bir yöntemin bağımsız değişkeni rastgele sayıda değeri kabul edebilir. Değişken sayıda değerleri kabul edebilen bu argümana vararg denir.

Varargları uygulamak için sözdizimi aşağıdaki gibidir:

 accessModifier methodName (veri türü… arg) (// yöntem gövdesi)

Vararg'ı tanımlamak için, bir yöntemin biçimsel parametresinde (üç nokta) kullanılır.

Değişken sayıda bağımsız değişken alan bir yönteme değişken arity yöntemi veya basitçe varargs yöntemi denir.

İlk olarak, vararg kullanmadan örneğe bakalım:

 class NoVararg ( public int sumNumber(int a, int b)( return a+b; ) public int sumNumber(int a, int b, int c)( return a+b+c; ) public static void main( String() args ) ( NoVararg obj = new NoVararg(); System.out.println(obj.sumNumber(1, 2)); System.out.println(obj.sumNumber(1, 2, 3)); ) )

Bu programı çalıştırdığınızda, çıktı:

 3 6

Açıkça görebileceğiniz gibi, sumNumber()3 bağımsız değişken için çalışmasını sağlamak için yöntemi aşırı yüklemeniz gerekiyordu .

Ya kullanıcı 5 numara veya 10 veya 100 eklemek isterse?

Bu, vararjların kullanımıyla düzgün bir şekilde halledilebilir. Bir kod örneği görelim:

Örnek: Vararjların çalışması

 class VarargExample ( public int sumNumber(int… args)( System.out.println("argument length: " + args.length); int sum = 0; for(int x: args)( sum += x; ) return sum; ) public static void main( String() args ) ( VarargExample ex = new VarargExample(); int sum2 = ex.sumNumber(2, 4); System.out.println("sum2 = " + sum2); int sum3 = ex.sumNumber(1, 3, 5); System.out.println("sum3 = " + sum3); int sum4 = ex.sumNumber(1, 3, 5, 7); System.out.println("sum4 = " + sum4); ) )

Programı çalıştırdığınızda, çıktı:

 bağımsız değişken uzunluğu: 2 toplam2 = 6 bağımsız değişken uzunluğu: 3 toplam3 = 9 bağımsız değişken uzunluğu: 4 toplam4 = 16

Burada, sumNumber()yöntem intkendisine iletilen parametrelerin toplamını döndürür (geçirilen bağımsız değişkenlerin sayısı önemli değildir).

Gördüğünüz gibi, vararjlar bazı durumlarda gerçekten faydalı olabilir. Ancak, bir yönteme geçirilen bağımsız değişkenlerin sayısından eminseniz, bunun yerine yöntem aşırı yüklemesini kullanın. Örneğin, sumNumber()yöntemin yalnızca 2 veya 3 bağımsız değişkenin toplamını hesaplamak için kullanılacağından eminseniz , ilk örnekteki gibi aşırı yükleme kullanın.

Başka bir örnek alalım. Java kitaplığında tanımlanan format () yöntemi, vararjları kabul eder. JDK'da format()yöntem şu şekilde tanımlanır:

 public static String format (Locale l, String format, Object… args) (// gövde)

Örnek: format () Yöntem

 class Company ( public static void main(String() args) ( String siteName = "programiz.com"; int empCount = 6; String type = "tutorial website"; System.out.println( String.format( "Site Name : %s, Emp Count: %d Type: %s", siteName, empCount, type ) ); ) )

Programı çalıştırdığınızda, çıktı:

 Site Adı: programiz.com, Emp Sayısı: 6 Tür: öğretici web sitesi 

Varargs sahnenin arkasında nasıl çalışır?

Şu sözde kodu ele alalım:

 public int sumNumber (int… nums) (// yöntem gövdesi)

Sözdizimi yöntemi sıfır veya daha fazla bağımsız değişkenlerle denebilecek Java derleyici söyler. Sonuç olarak, nums değişkeni örtük olarak bir tür dizisi olarak bildirilir int( ). Böylece metodun içinde nums değişkenine dizi sözdizimi kullanılarak erişilir.

Bağımsız değişken olmaması durumunda, sayıların uzunluğu 0'dır.

Varargs yöntemlerini aşırı yükleme

Tipik yöntemlere benzer şekilde, vararg yöntemlerini aşırı yükleyebilirsiniz.

Önerilen Okuma: Java Method Overloading

Örnek: Varargs Yöntemi Aşırı Yükleme

 class VarargOverload ( private void test(int… args)( int sum = 0; for (int i: args) ( sum += i; ) System.out.println("sum = " + sum); ) private void test(boolean p, String… args)( boolean negate = !p; System.out.println("negate = " + negate); System.out.println("args.length = "+ args.length); ) public static void main( String() args ) ( VarargOverload obj = new VarargOverload(); obj.test(1, 2, 3); obj.test(true, "hello", "world"); ) ) 

Programı çalıştırdığınızda, çıktı:

 sum = 6 negate = false args.length = 2

Yukarıdaki programda, test()kabul ettiği argüman sayısı değiştirilerek metot aşırı yüklenir.

Varargs'ı kullanırken hatırlanması gerekenler

Java değişkenleriyle çalışırken hatırlamanız gereken birkaç şey şunlardır:

1. Yöntem imzasını tanımlarken, her zaman sonunda varargları saklayın.

Değişken bağımsız değişken, yönteme iletilen son bağımsız değişken olmalıdır. Bir düşünelim, şöyle bir doSomething()yöntem çağırdınız :

 doSomething (1, 2, 3, 4);

Ve, senin doSomething()yöntem olarak tanımlanır:

 // yanlış yöntem bildirimi public void doSomething (int… nums, int p) (// yöntem gövdesi)

Bu durumda, derleyici nums'ye aktarılan argümanların sayısını bulamaz.

Ancak, yönteminizi şu şekilde tanımlarsanız:

 public void doSomething (int p, int… nums) (// yöntem gövdesi)

Java derleyicisi ilk bağımsız değişkeni p'ye atar ve kalan intbağımsız değişkenler sayılara atanır.

2. Bir yöntemin yalnızca bir varargs parametresi olabilir.

Örneğin, bu yöntem bildirimi yanlıştır:

 int doSomething (int p, float… floatNums, double… doubleNums) (// kod)

Varargs Yöntemi aşırı yüklemesinde belirsizlik

Bunun test()gibi aşırı yüklenmiş bir yöntemi düşünelim :

 sınıf Demo (statik boşluk testi (int… vargs) (// yöntem gövdesi) statik boşluk testi (int n, int… vargs) (// yöntem gövdesi))

Yukarıdaki programda, yöntemler aşırı yüklenmiş test()olmasına test()ve farklı sayıda argüman kabul etmesine rağmen yöntemi çağırmaya çalışırsanız derleyicinin kafası karışır .

Derleyici hangi yöntemi çağıracağını bilmiyor. Derleyici, test(int… vargs)bir varargs argümanıyla çağırmaya çalıştığınızı düşünebilir . Ayrıca, derleyici, test(int n, int… vargs)boş ikinci parametre ile birinci parametreye geçen argümanla çağırmaya çalıştığınızı düşünebilir .

İki olasılık olduğu için belirsizliğe neden olur. Bu nedenle, bazen varargs yöntemini aşırı yüklemek yerine iki farklı yöntem adı kullanmanız gerekebilir.

Ilginç makaleler...