varargs etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
varargs etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

29 Aralık 2014 Pazartesi

Overload Ek Özellikler

       S.a. Arkadaşlar,
       Bugünkü konumuzda daha önce işlediğimiz overload özelliğini işleyeceğiz, fakat bu  sefer farklı özellikleri ve bir kaç farklı kavram üzerinde duracağız. Ne demek istediğimizi yazı ilerledikçe daha iyi anlayacağınızı umuyoruz. Yazımıza bu sefer bir örnek ile başlamak istiyorum daha sonra ne demek istediğimizi anlatacağız.

public class CoolClass {
static void coolMethod(int x) {
System.out.print("int ");
}
static void coolMethod(long x) {
System.out.print("long ");
}
static void coolMethod(double x) {
System.out.print("double ");
}
     
public static void main(String[] args) {

byte b = 10;
short s = 10;
long l = 10;
float f = 5.0f;

coolMethod(b);
coolMethod(s);
coolMethod(l);
coolMethod(f);
}
}

Çıktı
int int long double

    Burada 'b' değişkenini ele alalım. Byte kendisinden büyük , fakat ortamdaki en küçük tanımlayıcıya gidecektir. Yani ne demek istiyoruz. 3 tip de kendisinden büyüktür fakat kendisinden büyük en küçük olan int olduğu için int değerine gidecektir. Şöyle dersek belki daha iyi anlarız, eğer
static void coolMethod(short x) {
System.out.print("short ");
}
kod kısmında bulunmuş olsaydı (kod içerisine yapıştırabilirsiniz) çıktı short olacaktı. Bunun sebebi dediğimiz gibi kendisinden büyük en küçük olana gitme kuralıdır. Eğer (int x) metodu olmasaydı o zaman long , o da olmasa tüm çıktı double olacaktı. Bu söylediklerimizi daha iyi anlayabilmek için kodu değiştirip derleminizi tevsiye ederiz.  O zaman daha iyi anlayacağınızdan eminiz.


     Şimdi de bu konuyla ilgili 3 kavrama bakacağız. Wideing, Boxing ve Var-args . Bu kavramları daha önceki yazılarımızdan yabancı değilsinizdir. Wideing'i ilk kez ele alıyoruz. Fakat bu kavramların overload ile birlikte kullanımı inceleceğiz. Şimdi kodumuza geçelim onun üstünden devam edelim.

public class Test3 {
 
        static void go(byte x, byte y) {
System.out.println("byte,byte");
}

        //ilk metodu yorumlarsak bu metod
        static void go(int x, int y) { //wideing
System.out.println("int,int");
}
     
         //ilk 2 metodu yorumlarsak bu metod
        static void go(Byte x, Byte y) { //boxing
System.out.println("Byte,Byte");
}
     
         //ilk 3 metodu yorumlarsak bu metod çalışacaktır
static void go(byte... x) { //var args
System.out.println("byte ...");
}

public static void main(String[] args) {
byte b = 10;
go(b, b);

}
}

     Şimdi konuyu biraz daha açalım. Burada wideing,boxing,var-args yapılarının hangisinin öncelikli olduğunu anlamaya çalışıyoruz. Bunun için dediğimiz satırları yorumlayarak anlayabiliriz. Yani tüm kodlar aktiften çıktımız byte,byte olacaktır, fakat ilk blocku yorumlarsak wideing bpxing var args arasından wideing çalışacaktır. Bunun diğerlerine önceliği vardır. Daha sonra boxing ve en son var args önceliklidir. Kodları derlediğinizde daha iyi anlayacağınızı düşünüyoruz.

10 Aralık 2014 Çarşamba

VARiabla ARGuments

                Bugünkü yazımızda VARiable ARGumentslerden bahsedeceğiz. Fakat bu konuya geçmeden önce parametre ve argüman konualarından bahsedip daha sonnra varargsa geçmeyi düşünüyoruz.
Argüman: bir metodu çağırırken içindeki değişkenlerdir
Örn; topla(a,b) gibi a ve b burada birer argümandır
Parametre : metod tanımlarken kullanılan değişkenlerdir
Örn; topla(int a, int b){} burada ise a ve b birer parametredir

                Şimdi konumuza daha ayrıntılı bakalım. Yukarıda bahsetmiş olduğumuz topla isimli metod 2 değişken değil de daha fazla değişken alabilir.

Örn; topla(int a, int b, int c , int d ) ve bu değişkenler daha artarsa ne olur. Her defasında yeni bir değişken mi ekleyeceğiz peki tabi ki hayır. Bunun için varargs var.

Örn; topla(int … args ) yapmamız yeterlidir. Burada 0 veya daha fazla değişken kullanabiliriz. Peki bize bunun dışında bir de String değişkeni lazım olursa ne yapmamız lazım. Onu da şöyle tanımlayabiliriz
topla(String s,int… args) olmalı. Burada dikkat edilmesi gereken kısım arg kısmını yani sonsuz sayıda değer alacağımız kısmı en son eklememiz gerektiği ve bir metodda en fazla 1 argüman olacağını unutmamalıyız. Kuralları kısaca şöyle tanımlayabiliriz bunla ilgili ve bu kurallardan bugünkü yazımızı tamamlıyoruz.

•   Sadece bir tek var-arg parametresi kullanilabilir.
     topla(int...x,String ...s) hatalıdır

•  Var-arg yapisinda olmayan diger parametrelerle birlikte kullanilabilir.
    topla(String s, int ...x) doğrudur

•   Var-arg yapisi metotda tanimlanirken en sonda olmalidir.
     topla(int ...  x, String s) hatalıdır

•   Var-arg yapisini tanimlarken 3 nokta parametre isminden once gelmelidir
      topla(int x...) hatalıdır

Kaynakça

http://www.injavawetrust.com/pure-java-08-declare-var-args/