Değişkenler değer depolamak için hafızada yer ayırmaktan başka bir şey değildir. Bu demek oluyor ki, siz değişken oluşturduğunuzda hafızada boş yer ayırıyorsunuz.
Değişkenin tipine bağlı olarak, derleyici hafızada yer ayırır(allocates) ve bu ayrılan yerde ne depolanabilir diye karar verir. Bu nedenle değişkenlere farklı veri tipi belirterek, bu değişkenlerin içerisine tamsayı, ondalıklı sayı veya karakter depolayabilirsiniz.
Scala farklı şekillerde değişken bildirimi yapmanıza olanak sağlar. İsterseniz değişken(varriable) isterseniz sabit(constant) olarak tanımlayabilirsiniz. Aşağıdaki örnekte var
anahtar kelimesi kullanılarak tanımlanmış değişken görüyorsunuz:
var myVar : String = "Foo"
Buradaki myVar
ismindeki değişken val
anahtar kelimesi ile tanımlanmıştır. Bu demek oluyor ki değişkenin içindeki değer değiştirilebilir. Bu tür değişkenlere mutable(değişken) ismini veriyoruz. Aşağıdaki örnekte ise ‘val’ anahtar kelimesi kullanılarak tanımlanmış değişken görüyoruz:
val myVal : String = "Foo"
Buradaki ‘myVal’ ismindeki değişken val
anahtar kelimesi kullanılarak tanımlanmıştır.Bu da demek oluyor ki değişkenin değeri sabittir, değişmez. Bu tür değişkenlere immutable(değişmez-sabit) ismini veriyoruz.
Değişkenin tipi, değişken isimlerinden sonra, eşittir işaretinden ise önce belirtilir. Herhangi bir Scala değişkenin tipini aşağıda gösterildiği gibi veri tipini belirterek tanımlayabilirsiniz:
var or val VariableName : DataType [= Initial Value]
Eğer herhangi bir başlangıç değeri atamak istemiyorsanız, aşağıdaki şekildeki gibi de tanımlama yapılabilir:
var myVar :Int;
val myVal :String;
Değişken tanımlaması yaparken eğer başlangıç değeri giriyorsanız, Scala derleyicisi atanan değere dayanarak değişkenin tipini otomatik olarak belirleyebilir. Buna ‘variable type inference’ diyoruz. Ben bunu Türkçeye ‘değişken tipi algılama’ olarak çevirdim(!). Bu değişken tipi algılaması sayesinde değişken bildirimlerini bu şekilde yapabilirsiniz:
var myVar = 10;
val myVal = "Hello, Scala!";
Burada varsayılan olarak ‘myVar’ değişkeni Int, ‘myVal’ değişkeni ise String tipinde olacaktır.
Scala çoklu atamayı destekler. Eğer kod bloğu veya metot Tuple(demet) döndürüyorsa, Tuple ‘val’ değişkenine atanabilir. [ Not: Tuple konusu daha sonraki derslerde göreceğiz.]
val (myVar1: Int, myVar2: String) = Pair(40, "Foo")
Ayrıca üstte gördüğümüz tip algılaması(type inferencer) sayesinde bunu aşağıdaki şekilde de tanımlayabiliriz:
val (myVar1, myVar2) = Pair(40, "Foo")
Scala değişkenlerin kullanıldığı alana bağlı olarak 3 farklı kapsama sahip olabilir. Bu değişken kapsamları ise alanlar(fields), metot parametreleri(method parameters) ve yerel değişkenlerdir(local variables). Aşağıda her kapsam hakkında açıklamalar yapılmıştır:
Alanlar örneğin bir butonun üstünde yazan yazı veya butonun genişliği hatta butonun rengidir. Yani nesneye ait özelliklere biz Field diyoruz. Alt tarafta Field veya alan demek yerine ‘özellik’ olarak bahsedeceğim.
Özellikler, nesnelere(object - obje) ait değişkenlerdir. Özellikler, nesnenin içerisindeki her metottan erişilebilir. Ayrıca özelliklere, özellikler tanımlanırken kullanılan erişim belirleyicisine göre nesnenin dışından da erişilebilir. Nesne özellikleri mutable(değişken) veya immutable(sabit) olarak iki türde olabilir ve ‘var’ veya ‘val’ anahtar kelimeleri kullanılarak tanımlanabilir.
Metot parametreleri metot çağrıldığında metodun içine değer göndermek amacıyla kullanılan değişkenlerdir. Metot parametreleri sadece metodun içerisinden erişilebilir fakat fonksiyonun parametresine nesneyi referans olarak gönderirseniz dışarıdan da erişilebilir olma durumu söz konusudur. Metot parametreleri daima mutable(değişken) türdedirler ve ‘var’ anahtar kelimesi ile tanımlanırlar.
Yerel değişkenler metodun içerisinde tanımlanan değişkenlerdir. Yerel değişkenler sadece metodun içerisinden erişilebilir fakat oluşturduğunuz nesne metodun içinden Return ifadesi ile döndürülür ise dışarıdan erişilmiş olur. Yerel değişkenler mutable(değişken) veya immutable(sabit) olarak her iki tipte de olabilir böylece var
veya val
anahtar kelimelerini kullanarak tanımlayabilirsiniz.