Java- var Keyword
Java 10 ile beraber local değişkenler için tip belirtmeden, var anahtar sözcüğünü kullanabilme özelliği eklenmiştir. Var anahtar keilmesi, local değişkenler (local variables) için tip çıkarımı yapan bir yapıdır. Bu yapıyla değişkene ait tip bilgisi bildirimi yapılmasına gerek yoktur. Bunun yerine var anahtar sözcüğü ile tip bildirimi yapılabilir.
public void varTypeDescription(){ var name = "Hello"; var size = 8; }
*var anahtar sözcüğünü class variable ve instance variable olarak kullanamazsınız. Sadece local variable olarak kullanabilirsiniz. Dolayısıyla aşağıdaki gibi bir kod bloğu derlenmeyecektir.
public class VarType { var kelime = "Merhaba"; // DOES NOT COMPILE }
var anahtar sözcüğünü ile bildirimde bulunduğumuzda derleyicinin bizim yerimize tip belirlemesini istiyoruz. Aşağıdaki örneğe bakalım. 2. satırda numberA değişkenine atanan değer 1. Derleyici bunun bir int tipi olduğunu anlar. Bu yüzden 3. satırda numberA değişkenine 2 değeri atandığında int tipte bir değer atandığı için problem yaratmaz. Ancak 4. satırda string bir değişken atanmaya çalışılıyor. Bu satır derlenmeyecektir. Çünkü derleyici numberA değişkenin int bir tipte olduğunu biliyor.
public void varTypeDescription() { var numberA = 1; numberA = 2; numberA = "bes"; //DOES NOT COMPILE }
Javascript gibi bir dil biliyorsanuz, var değişkeninin runtime ‘da herhangi bir tipi alabilen bir değişken anlamına geldiğini biliyor olabilirsiniz. Ancak Java’da var anahtar sözcüğü ile bildirilen değişken, derleme zamanında tanımlanan bir türdür. Çalışma zamanında tipi değiştirilemez.
Derleyici değişkene atanan değere göre tipi belirliyor. Bu yüzden değer atanmadan sadece bildirimde bulunan değişkenler “cannot infer type for local variable name” hatası verecektir.
public void varTypeDescription(){ var name; //DOES NOT COMPILE }
Ek olarak, metod parametrelerinde kullanılamazlar.
public void add(var a, var b){ //DOES NOT COMPILE return a+b; }
Tüm kuralları toplayacak olursak;
- var, local varible olarak bir metotta, constroctor’da ve ya initizalizer blokta kullanılabilir.
- var, instance variable, class variable, metot parametresi, constructor parametresi olarak kullanılamazlar.
- var, her zaman aynı satırda başlatılır. Bir var ile bildirilen değişkenin değeri değişebilir ancak tipi değiştirilemez.
- var, tip olmadan null bir değerle başlatılamaz.