Operatörler, derleyiciye bilinen matematiksel veya mantıksal işlemleri aktarmamızı sağlayan sembollerdir. Scala, gömülü operatörlerin ve aşağıda listelenen operatörlerin kullanılmasına olanak sağlar:
Bu derste; aritmetik, ilişkisel, mantıksal, bitwise, atama ve diğer operatörleri tek tek inceleyeceğiz.
Aşağıdaki operatörler Scala dili tarafından desteklenen aritmetik operatörler:
A ismindeki değişkenin 10 değerini, B ismindeki değişkenin ise 20 değerini tuttuğunu varsayın:
Aşağıdaki örneği inceleyerek Scala Dilinde kullanılan tüm aritmetik operatörleri anlamaya çalışın.
Aşağıdaki kodları kopyalayıp Test.Scala dosyasına yapıştırın ve derleyip çalıştırın:
object Test {
def main(args: Array[String]) {
var a = 10;
var b = 20;
var c = 25;
var d = 25;
println("a + b = " + (a + b) );
println("a - b = " + (a - b) );
println("a * b = " + (a * b) );
println("b / a = " + (b / a) );
println("b % a = " + (b % a) );
println("c % a = " + (c % a) );
}
}
Bu program aşağıdaki çıktıyı verecektir:
C:/>scalac Test.scala
C:/>scala Test
a + b = 30
a - b = -10
a * b = 200
b / a = 2
b % a = 0
c % a = 5
C:/>
Operatör | Açıklama | Örnek |
---|---|---|
+ | İki işleneni toplar. | A + B sonucu 30 |
- | İkinci işleneni birinci işlenenden çıkarır. | A - B sonucu -10 |
* | Her iki işleneni çarpar. | A * B sonucu 200 |
/ | Payı paydaya böler. | B / A sonucu 2 |
% | Modül ve mod(kalanı bulur) alır. | B % A sonucu 0 |
Aşağıdaki operatörler Scala dili tarafından desteklenen ilişkisel operatörler:
A ismindeki değişkenin 10 değerini, B ismindeki değişkenin ise 20 değerini tuttuğunu varsayın:
Aşağıdaki örnekte ilişkisel operatörler örneklendirilmiştir.
Aşağıdaki kodları kopyalayıp Test.Scala dosyasına yapıştırın ve derleyip çalıştırın:
object Test {
def main(args: Array[String]) {
var a = 10;
var b = 20;
println("a == b = " + (a == b) );
println("a != b = " + (a != b) );
println("a > b = " + (a > b) );
println("a < b = " + (a < b) );
println("b >= a = " + (b >= a) );
println("b <= a = " + (b <= a) );
}
}
Bu program aşağıdaki çıktıyı verecektir:
C:/>scalac Test.scala
C:/>scala Test
a == b = false
a != b = true
a > b = false
a < b = true
b >= a = true
b <= a = false
C:/>
Operatör | Açıklama | Örnek |
---|---|---|
== | Operatörün her iki tarafındaki değeri eşit mi, eşit değil mi diye kontrol et ve eşitse true değerini döndür. | (A == B) ifades true değildir. |
!= | Operatörün her iki tarafındaki değeri eşit mi, eşit değil mi diye kontrol et ve eşitse DEĞİLSE true değerini döndür. | (A != B) ifadesi true. |
> | Operatörün sol tarafındaki değerin sağ tarafındaki değerden daha büyük olup olmadığını kontrol et ve daha büyükse true değerini döndür. | (A > B) ifadesi true değildir. |
< | Operatörün sol tarafındaki değerin sağ tarafındaki değerden daha küçük olup olmadığını kontrol et ve daha küçükse true değerini döndür. | (A < B) ifadesi true. |
>= | Operatörün sol tarafındaki değerin sağ tarafındaki değerden daha büyük veya eşit olup olmadığını kontrol et ve daha büyük veya eşitse true değerini döndür. | (A >= B) ifadesi true değildir. |
<= | Operatörün sol tarafındaki değerin sağ tarafındaki değerden daha küçük veya eşit olup olmadığını kontrol et ve daha küçük veya eşitse true değerini döndür. | (A <= B) ifadesi true. |
Aşağıdaki operatörler Scala dili tarafından desteklenen mantıksal operatörler:
A ismindeki değişkenin 1 değerini, B ismindeki değişkenin ise 0 değerini tuttuğunu varsayın:
Aşağıdaki örnekte mantıksal operatörler örneklendirilmiştir. Aşağıdaki kodları kopyalayıp Test.Scala dosyasına yapıştırın ve derleyip çalıştırın:
object Test {
def main(args: Array[String]) {
var a = true;
var b = false;
println("a && b = " + (a&&b) );
println("a || b = " + (a||b) );
println("!(a && b) = " + !(a && b) );
}
}
Bu program aşağıdaki çıktıyı verecektir:
C:/>scalac Test.scala
C:/>scala Test
a && b = false
a || b = true
!(a && b) = true
C:/>
Operatör | Açıklama | Örnek |
---|---|---|
&& | ‘Mantıksal Ve’ operatörü olarak bilinir. Eğer operatörün her iki tarafındaki işlenen sıfırdan farklıysa true değerini döndürür. | (A && B) ifadesi false. |
|| | ‘Mantıksal Veya’ operatörü olarak bilinir. Eğer operatörün herhangi birinin sıfırdan farklı olması durumunda true değerini döndürür. | (A || B) ifadesi true. |
! | ‘Mantıksal Değil (Logical NOT)’ operatörü olarak bilinir. Başına geldiği ifadenin değerini zıttına çevirir yani değilini alır. Eğer ifade true ise bu operatör false olarak döndürür. | !(A && B) ifadesi true. |
Bitwise operatörü bitler üzerinde çalışır ve bitler üzerinden işlem yapar. &, |, ve ^ sembolleri için doğruluk tablosu aşağıdaki gibidir:
p | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
A = 60; ve B = 13; olarak varsayın ve Binary(ikili) değer olarak karşılıkları aşağıdaki gibi olacaktır:
A = 0011 1100
B = 0000 1101
A&B = 0000 1100
A | B = 0011 1101 |
A^B = 0011 0001
~A = 1100 0011
Scala dili tarafından desteklenen Bitwise operatörleri aşağıdaki tabloda listelenmiştir. A’nın değerinin 60 ve B’nin değerinin 13 olduğunu varsayarak devam edersek:
Aşağıdaki örnekte Bitwise operatörler örneklendirilmiştir. Aşağıdaki kodları kopyalayıp Test.Scala dosyasına yapıştırın ve derleyip çalıştırın:
object Test {
def main(args: Array[String]) {
var a = 60; /_ 60 = 0011 1100 _/
var b = 13; /_ 13 = 0000 1101 _/
var c = 0;
c = a & b; /* 12 = 0000 1100 */
println("a & b = " + c );
c = a | b; /* 61 = 0011 1101 */
println("a | b = " + c );
c = a ^ b; /* 49 = 0011 0001 */
println("a ^ b = " + c );
c = ~a; /* -61 = 1100 0011 */
println("~a = " + c );
c = a << 2; /* 240 = 1111 0000 */
println("a << 2 = " + c );
c = a >> 2; /* 215 = 1111 */
println("a >> 2 = " + c );
c = a >>> 2; /* 215 = 0000 1111 */
println("a >>> 2 = " + c );
}
}
Bu program aşağıdaki çıktıyı verecektir:
C:/>scalac Test.scala
C:/>scala Test
a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 15
a >>> 15
C:/>
Operatör | Açıklama | Örnek |
---|---|---|
& | ‘İkili Ve (Binary AND)’ operatörü her iki sayının ikili değerini karşılaştırır ve aynı değerin olduğu yerleri döndürür. | (A & B) ifadesi 12’nin karşılığı olan 0000 1100 değerini verir. |
| | ‘İkili Veya (Binary OR)’ operatörü her iki sayının ikili değerinin karşılıklarında bulunan 1’lerin kopyasını alır. | (A | B) ifadesi 61’in karşılığı olan 0011 1101 değerini verir. |
^ | ‘İkili XOR’ operatörü her iki sayının ikili değerini karşılaştırır ve sadece birinde bulunan değerin kopyasını alır. | (A ^ B) ifadesi 49’un karşılığı olan 0011 0001 değerini verir. |
~ | ‘Binary Ones Complement’ operatörü tekli operatördür ve ifadenin tersini döndürür. | (~A ) ifadesi -61’in imzalı(signed) ikili sayı karşılığı olan 1100 0011 değerini verir. |
« | ‘İkili Sola Kaydırma (Binary Left Shift)’ operatörüdür. Sol taraftaki işlenenin binary karşılığını, sağ taraftaki işlenenin değeri kadar sola kaydırır. | A « 2 ifadesi 240’ın karşılığı olan 1111 0000 değerini verir. |
» | ‘İkili Sağa Kaydırma (Binary Right Shift)’ operatörüdür. Sol taraftaki işlenenin binary karşılığını, sağ taraftaki işlenenin değeri kadar sağa kaydırır. | A » 2 ifadesi 15’in karşılığı olan 1111 değerini verir. |
»> | ‘Shift right zero fill’ operatorüdür. operatörüdür. Sol taraftaki işlenenin binary karşılığını, sağ taraftaki işlenenin değeri kadar sağa kaydırır ve kaydırılan değerler sıfırlarla doldurulur. | A »>2 ifadesi 15 sayısının karşılığı olan 0000 1111 değerini verir. |
Scala dili tarafından desteklenen atama operatörleri aşağıdaki tabloda listelenmiştir.
Aşağıdaki örnekte atama operatörleri örneklendirilmiştir. Aşağıdaki kodları kopyalayıp Test.Scala dosyasına yapıştırın ve derleyip çalıştırın:
object Test {
def main(args: Array[String]) {
var a = 10;
var b = 20;
var c = 0;
c = a + b;
println("c = a + b = " + c );
c += a ;
println("c += a = " + c );
c -= a ;
println("c -= a = " + c );
c *= a ;
println("c *= a = " + c );
a = 10;
c = 15;
c /= a ;
println("c /= a = " + c );
a = 10;
c = 15;
c %= a ;
println("c %= a = " + c );
c <<= 2 ;
println("c <<= 2 = " + c );
c >>= 2 ;
println("c >>= 2 = " + c );
c >>= 2 ;
println("c >>= a = " + c );
c &= a ;
println("c &= 2 = " + c );
c ^= a ;
println("c ^= a = " + c );
c |= a ;
println("c |= a = " + c );
}
}
Bu program aşağıdaki çıktıyı verecektir:
C:/>scalac Test.scala
C:/>scala Test
c = a + b = 30
c += a = 40
c -= a = 30
c \*= a = 300
c /= a = 1
c %= a = 5
c <<= 2 = 20
c >>= 2 = 5
c >>= 2 = 1
c &= a = 0
c ^= a = 10
c |= a = 10
C:/>
Operatör | Açıklama | Örnek |
---|---|---|
= | Temel atama operatörüdür. Sağ taraftaki işleyicinin değerini sol taraftaki işleyiciye aktarır. | C = A + B ifadesi A + B değerini C’ye aktarır. |
+= | ‘Ekle ve Ata’ operatörüdür. Sağdaki işlenen ile soldaki işlenenin değerini toplar ve sonucu soldaki işlenene aktarır. | C += A ifadesi C = C + A ifadesine eşittir. |
-= | ‘Çıkar ve Ata’ operatörüdür. Soldaki işlenenin değerinden sağdaki işlenenin değerini çıkarır ve sonucu soldaki işlenene aktarır. | C -= A ifadesi C = C - A ifadesine eşittir. |
*= | ‘Çarp ve Ata’ operatörüdür. Soldaki işlenen ile sağdaki işleneni çarpar ve sonucu soldaki işlenene aktarır. | C _= A ifadesi C = C _ A ifadesine eşittir. |
/= | ‘Böl ve Ata’ operatörüdür. Soldaki işleneni sağdaki işlenene böler ve sonucu soldaki işlenene aktarır. | C /= A ifadesi C = C / A ifadesine eşittir. |
%= | ‘Mod Al ve Ata’ operatörüdür, Her iki işleneni kullanarak mod alır ve sonucu soldaki işlenene aktarır. | C %= A ifadesi C = C % A ifadesine eşittir. |
«= | ‘Left shift ve Ata’ operatorüdür. | C «= 2 ifadesi C = C « 2 ifadesi ile aynıdır. |
»= | ‘Right shift ve Ata’ operatörüdür. | C »= 2 ifadesi C = C » 2 ifadesi ile aynıdır. |
&= | ‘Bitwise ve Ata’ operatörüdür. | C &= 2 ifadesi C = C & 2 ifadesi ile aynıdır. |
^= | ‘bitwise exclusive VEYA ve atama operatörüdür. | C ^= 2 ifadesi C = C ^ 2 ifadesi ile aynıdır. |
|= | ‘bitwise inclusive VEYA ve atama operatörüdür. | C |= 2 ifadesi C = C | 2 ifadesi ile aynıdır. |
Operatör önceliği ifadelerin işlem gruplandırmasını belirler. Bu ifadeye nasıl değer biçileceğini etkiler. Bazı operatörlerin diğerlerine göre yüksek öncelikleri vardır. Örneğin; çarpma operatörünün, toplama operatörüne göre önceliği daha yüksektir. Örneğin; x = 7 + 3 * 2; ifadesi 20 sayısına değil, 13 sayısına eşittir, çünkü çarpma işaretinin toplama işaretine göre daha yüksek önceliği vardır. Bu sebeple işlemde ilk olarak 3*2 ifadesi yapıldı ve çarpa ifadesinden gelen sonuç 7 ile toplandı. Aşağıdaki tabloda en yüksek önceliğe sahip operatörler tablonun üst kısmından, önceliği en düşük operatöre kadar aşağıya doğru sıralanmıştır. Önceliği yüksek olan operatörler ilk değerlendirmeye alınacak operatörlerdir.
Kategori | Operatör | Okunuş |
---|---|---|
Postfix | () [] | Soldan Sağa |
Unary | ! ~ | Sağdan Sola |
Multiplicative | * / % | Soldan Sağa |
Additive | + - | Soldan Sağa |
Shift | » »> « | Soldan Sağa |
Relational | > >= < <= | Soldan Sağa |
Equality | == != | Soldan Sağa |
Bitwise AND | & | Soldan Sağa |
Bitwise XOR | ^ | Soldan Sağa |
Bitwise OR | | | Soldan Sağa |
Logical AND | && | Soldan Sağa |
Logical OR | || | Soldan Sağa |
Assignment | = += -= *= /= %= »= «= &= ^= |= | Sağdan Sola |
Comma | , | Soldan Sağa |