Kurs
DataCamp'in yeni yayımlanan Scala kursuna göz atın: Introduction to Scala.
Scala, Büyük Veri alanında Apache Spark ile birlikte kullanılan büyük veri hacimleriyle çalışırken veri bilimciler tarafından yaygın olarak kullanılır. Hem nesne yönelimli hem de fonksiyonel bir programlama dilidir ve aşağıda listelenen birçok önemli özelliğe sahiptir:
- Scala, değişkenin veri türünün kullanılmadan önce tanımlandığı, statik olarak türlenen bir dildir. Tür denetimi çalışma zamanında değil, derleme zamanında yapılır.
- Ayrıca, değişkenler üzerinde işlem yapılmadan önce denetlendiği "Güçlü Türlü" bir dildir.
- Ayrıca Tür Çıkarımı'nı destekler; derleyici türü ifade veya sabitten çıkarır, bu nedenle değişken türünü belirtmek isteğe bağlıdır.
Bu eğitimde aşağıdaki konuları ele alacaksınız:
- Değişkenler
- Scala'da Değişken Tanımlama Kuralları
- Değiştirilebilir (Mutable) değişkenler
- Değiştirilemez (Immutable) değişkenler
- Birden Çok Bildirim ve Atama
- Scala'da Değişken Kapsamı
Değişkenler
Değişkenler bellekte adlandırılmış bir alandır ve derleyici, ilgili değişkenin veri türüne göre ayrılmış bir konum ayırır. Değişken, Scala'da aşağıdaki sözdizimiyle bildirilir:
val or val variable_name: variable_datatype = value;
Yukarıdaki sözdiziminde değişken, 'var' ya da 'val' anahtar sözcüğü kullanılarak iki yoldan biriyle tanımlanabilir. Noktalı virgülden önce yeni değişkeniniz olan 'variable_name' ve ardından iki nokta üst üste gelir. Değişkenin veri türü 'variable_datatype' olup herhangi bir geçerli veri türü olabilir. Sonrasında 'value' değeri 'variable_name' değişkenine atanır.
Örneğin:
val varValue: Byte = 8;
'val', değişken tanımlamak için kullanılan anahtar sözcüktür ve 'varValue' değişken adıdır. Veri türü 'Byte'tır ve 8 değerini içerir. 'Byte', 2−7 ile 27−1 arasında değişen, işaretli 8 bitlik bir değerdir.
Yukarıdaki 'variable_datatype', Scala'da var olan herhangi bir veri türü olabilir ve şunlardır:
- Int: 2−31 ile 231−1 aralığında, 32 bitlik işaretli (pozitif veya negatif) bir değerdir.
- Byte: 2−7 ile 27−1 aralığında, 8 bitlik işaretli bir değerdir.
- Short: 2−15 ile 215−1 aralığında, 16 bitlik işaretli bir değerdir.
- Float: 32 bit veya 64 bit olabilir.
Benzer şekilde Long, Char, Boolean, Char, String, Boolean, Null gibi diğer veri türlerinin de kendi aralıkları vardır ve ayrıntılı açıklama Scala'ya Yeni Başlayanlar Rehberi adlı eğitimde verilmiştir. Ayrıca 'variable_datatype' büyük harfle başlamalıdır; örneğin Int, 'I' harfini içerir; bu da yukarıdaki tüm veri türlerinin Scala'da birer nesne olduğunu gösterir.
Scala'da Değişken Tanımlama Kuralları
Scala'da değişken tanımlama kuralları ve gelenekleri şöyledir:
- Değişken adı lower camel case ile başlar. Örneğin 'nameOfGirl' değişken adında, ilk harf olan 'n' küçük harftir. Sonraki kelimelerin ilk harfleri ise 'O' ve 'G' gibi büyük yazılır.
- Değişken adı, Scala'da tanımlı ayrılmış sözcükleri veya anahtar sözcükleri içeremez.
- Değişken adı dolar işareti ('$') ve alt çizgi ('_') içerebilir. Ancak '#','&' gibi diğer özel karakterlere izin verilmez. Ayrıca alt çizgi kullanımı da önerilmez.
- Boşluk (sekme, boşluk) değişken adında kullanılamaz.
- Değişken adı bir harfle başlamalıdır; bir sayı veya başka karakterle başlayamaz.
Değiştirilebilir (Mutable) Değişkenler
Değiştirilebilir değişkenler, değişkenlerin değerlerinin bildirimin ardından bile değiştirilmesine izin verir.
Değiştirilebilir değişkenin sözdizimi aşağıda gösterilmiştir:
var variable_name : variable_datatype = value;
Değiştirilebilir değişkenin sözdizimi aşağıdaki gibi de tanımlanabilir:
var variable_name = value;
Değiştirilebilir değişken örneği aşağıda gösterilmiştir:
var nameOfThing: String = "Car";
Yukarıdaki örnekte var, Değiştirilebilir Değişkenleri tanımlamak için kullanılan anahtar sözcüktür. Değişkenin adı 'nameOfThing'tir. Bunu, veri türü 'String' olan iki nokta üst üste izler. Bellekte depolanan değeri 'Car' olacaktır.
Yukarıdaki Değiştirilebilir değişken örneği, farklı sözdizimiyle aşağıdaki gibi yapılabilir:
var nameOfThing = "Car";
Yukarıda yapıldığı gibi, değişkeninizi veri türünü belirtmeden tanımlayabilirsiniz. Scala derleyicisi bunun 'String' veri türü olduğunu otomatik olarak belirler; buna Tür Çıkarımı denir.
Değişkenin değerini aşağıda gösterildiği gibi kolayca değiştirebilirsiniz:
nameOfThing = "Bike";
print(nameOfThing)
Değişkenin değeri "Car"dan "Bike"a değişir. Çıktı "Bike" olacaktır; çünkü 'var' anahtar sözcüğü, değişkenin değerini değiştirmenize olanak tanır (Kaynak: Variables in Scala).
Değiştirilemez (Immutable) Değişkenler
Değiştirilemez değişkenler, oluşturulduktan sonra değeri değiştirilemeyen ve 'val' anahtar sözcüğü kullanılarak bildirilen değişkenlerdir.
Değiştirilemez değişkenin sözdizimi aşağıda gösterilmiştir:
val variable_name : variable_data type = value;
Değiştirilemez değişkenin sözdizimi aşağıdaki gibi de tanımlanabilir:
val variable_name = value;
Değiştirilemez değişken örneği aşağıda gösterilmiştir:
val numberOfThing: Int = 2;
Yukarıdaki örnekte val, Değiştirilemez değişkenleri tanımlamak için kullanılan anahtar sözcüktür ve değişkenin adı 'numberOfThing'tir. Bunu, veri türü 'Int' olan iki nokta üst üste izler ve bellekte depolanan değer 2'dir.
Yukarıdaki Değiştirilemez değişken örneği, farklı sözdizimiyle aşağıdaki gibi yapılabilir:
val numberOfThing = 2;
Yukarıda yapıldığı gibi, değişkeninizi veri türünü belirtmeden tanımlayabilirsiniz; Scala derleyicisi bunun 'Int' veri türü olduğunu otomatik olarak anlar. Bu işleme Tür Çıkarımı denir (Kaynak: Variables in Scala).
Aşağıda gösterildiği gibi değişkenin değerini değiştiremezsiniz:
numberOfThing = 7;
Yukarıdaki örnek, "error: not found: value numberOfThing" gibi bir hatayla sonuçlanacaktır; bu da aşağıda gösterildiği gibi değerin yeniden atanmasının mümkün olmadığını gösterir:

Birden Çok Bildirim ve Atama
Scala'da, değişken adı virgüllerle ayrılarak ve değişkene ait değerle birlikte "=" işareti kullanılarak 'var' anahtar sözcüğüyle birden çok bildirim yapılabilir.
var (x, y, z) = (5, 4.5, "Sit")
Yukarıdaki örnekte x, y ve z değişkenlerinin sırasıyla 5, 4.5 ve "Sit" değerlerini aldığı görülebilir.

Scala'da, değişken adı virgüllerle ayrılarak ve değişkene ait değerle birlikte "=" işareti kullanılarak 'val' anahtar sözcüğüyle tek satırda birden çok atama da yapılabilir.
val a, b, c = 1;
Yukarıdaki örnekte, a, b ve c değişkenlerinin tamamının 1 değerini aldığı görülebilir.

Değişkenin Kapsamı
Kapsam, değişkenlerin görünürlüğüdür ve ömürleri kodun belirli blokları içinde geçerlidir. Değişken, Yerel (Local) veya Genel (Global) kapsamda tanımlanabilir. Örneğin:
var globalVar = 10
def sub(){
var difference = 9-4;
}
print(difference)//Error
print(globalVar)//Valid
Yukarıdaki kodda 'difference' değişkeni, 'sub' yöntemi içinde bildirildiği için Yerel Kapsamdadır ve çıkarma işlemi geçerli sonuç verir; ancak 'sub' yöntemi dışında değeri yazdırmak hata verir. Ayrıca, 'globalVar' değişkeninin programın herhangi bir yerinden erişilebildiği ve üzerinde her türlü işlemin yapılabildiği Genel Kapsam da vardır.
Scala'da değişkenler için üç tür kapsam vardır (Kaynak: Scala- Variables):
- Yerel değişkenler
- Alanlar (Fields)
- Yöntem Parametreleri
Yerel Değişkenler
Yerel değişkenler, bir yöntem içinde bildirilen ve yalnızca yöntemlerin içinde erişilebilen, dışında erişilemeyen değiştirilebilir veya değiştirilemez değişkenlerdir.
Yerel değişkenler hakkında bilgi edinmek için aşağıdaki basit örneğe bakabilirsiniz:
class Perimeter
{
def triangle()
{
var side1 = 10;
var side2 = 20;
var side3 = 30;
var total = side1+side2+side3;
print("Perimeter of the triangle is: " + total);
}
}
object Test
{
def main(args:Array[String])
{
val p1 = new Perimeter()
p1.triangle()
}
}
defined class Perimeter
defined object Test
Yukarıdaki kod şu sonucu verir:
Üçgenin çevresi: 60
Yukarıdaki programda 'Perimeter' adlı bir sınıf ve 'Test' adlı bir nesne bulunur; içinde side1, side2, side3 olmak üzere üç değiştirilebilir değişkenin yer aldığı triangle adlı bir yöntem vardır. Hesaplama ve sonucun yazdırılması yöntem içinde yapılır ve doğru çıktıyı verir.
Alanlar (Fields)
Sınıf içinde tanımlanan değişkenlere, değiştirilebilir veya değiştirilemez türde olabilen alan değişkenleri denir. Bir değişken sınıf içinde bildirildiyse ve herhangi bir yöntem içinde tanımlı değilse erişim belirleyici varsayılan olarak public olur ve değişkene programın her yerinden erişilebilir. Ancak private bir değişkene yalnızca tanımlandığı sınıf içinde erişilebilir; sınıfın kapsamı dışında veya nesneden bile erişilemez.
class FieldExample
{
var value1 = 10;
private var value2 = 30;
def operation()
{
println("Value of value1:"+value1)
}
println("Value of value2: "+value2);
}
object Demo
{
def Main(args:Array[String])
{
val obj = new FieldExample()
obj.operation()
print(obj.value1)//Valid
print(obj.value2)
}
}
defined class FieldExample
defined object Demo
Yukarıdaki kod şu sonucu verir:
Value of value2: 30
Value of value1:10
10
Yukarıdaki programda 'FieldExample' adlı bir sınıf, 'Demo' adlı bir nesne ve 'operation' adlı bir yöntem bulunur. Genel (public) değişken value1'e nokta gösterimiyle erişilebilir ve değeri 10 olarak yazdırılır. Özel (private) value2 değişkeni 30'dur; bu değişkene erişmeye ve yazdırmaya çalışmak ise hata oluşturur.
Yöntem Parametreleri
Yöntem parametreleri, yöntem çağrıldığında değeri kabul eden değişkenlerdir ve 'val' anahtar sözcüğü kullanılarak tanımlanan değişkenlerin değiştirilemez olması gerekir. Ayrıca, bir başvuru yapıldığında değişkene yöntem dışında da erişilebilir.
Yöntem Parametreleri hakkında bilgi edinmek için aşağıdaki basit örneğe bakabilirsiniz:
class Triangle
{
def calculate(height: Int, width: Int)
{
var result = 0.5*(height+width);
println("Area of triangle is: " + result);
}
}
object Area
{
def main(args:Array[String])
{
val a = new Triangle()
a.calculate(4,5);
}
}
defined class Triangle
defined object Area
Yukarıdaki kod şu sonucu verir:
Area of triangle is: 4.5
Yukarıdaki programda 'Triangle' adlı bir sınıf bulunur. 'calculate' adlı bir yöntem ve height ile width olmak üzere iki yöntem parametresi içerir. 'calculate', a nesne örneği kullanılarak çağrıldığında 4 ve 5 tamsayı değerleri geçirilir.
Sonuç
Tebrikler, bu eğitimin sonuna geldiniz!
Bu eğitimde Scala'nın değişkenlerini, değişken tanımlama kurallarını, birden çok bildirim ve atama içeren farklı değişken türlerini ve bunlarda değişken kapsamını ele aldınız.
Scala hakkında daha fazla bilgi edinmek isterseniz DataCamp'in Introduction to Scala kursunu alın.
