29
 Akın Kaldıroğlu   Java İle Nesne Merkezli Programlama  www.javaturk.org  Mart 2011

4. Bölüm Operatörler

Embed Size (px)

Citation preview

Page 1: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 1/29

 Akın Kaldıroğlu 

 Java İle Nesne Merkezli Programlama 

 www.javaturk.org Mart 2011

Page 2: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 2/29

Operatörler/ İşlemciler (Operators)

Operatör ya da işlemci, bir, iki ya da üç tane işlenen/girdi(operand) üzerinde işlem yapıp bir sonuç üreten semboldür. 

Tek işlenenli operatörlere, tekli (unary ) operatör,

İki işlenenli operatörlere, ikili (binary ) operatör,

Üç işlenenli operatörlere de, üçlü (ternary ) operatör denir.

İşlenen, bir ifade (expression) de olabilir. 

2www.javaturk.org

//Tekli operatör

operator operand  ya da operand operator// İkili operatör operand1 operator operand2

//Üçlü operatöroperand1 ? operand2 : operand3

Page 3: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 3/29

Atama (Assignment) Operatörü

 Atama (assignment ) operatörü, en basit operatördür.İki işlenen alır ve sağdaki işleneni (tek bir değer üreten daha

karmaşık bir ifade de olabilir) soldaki işlenene atar. 

Bu atama bazen değer atamasıdır bazen de nesne referansıatamasıdır. 

3www.javaturk.org

//Değer ataması in t i = 5;

boolean b = false;

//Nesne referansı ataması Car myCar = new Car();

Page 4: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 4/29

İkili Aritmetik Operatörler 

Aritmetik operatörler 5 tanedirler ve hepsi iki işlenenalırlar: 

+: Toplama

-: Çıkarma 

*: Çarpma

/: Bölme

%: Kalan ya da mod

+ operatörünün, String nesnelerini de arka arkayaekleyebileceğini ileride göreceğiz. 

4www.javaturk.org

Page 5: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 5/29

Birleşik Atama 

Eğer bir değişkenin değerini değiştirip, yeni değerini yinekendisine atayacaksanız, bunu birleşik atama (compound 

assignment ) ile daha az kod yazarak yapabilirsiniz.

Birleşik atamalar, +, -, *, /, %, &, |, ^, <<, >> ve >>> 

operatörlerinde kullanılabilir. 

5www.javaturk.org

in t i = 5;

 j = i + 3; // i şimdi 8

i += 3; // i şimdi 11 

i -= 4; // i şimdi 7; i *= 2; // i şimdi 14 i /= 7;  // i şimdi 2 

Page 6: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 6/29

Aritmetik Yükseltmeler

Aritmetik operatörler, yaptıkları işlem sonucunda en az int  tipinde bir değer üretirler. Yani 

Aritmetik operatörün en az bir işleneni double ise sonuçdouble,

Değilse, aritmetik operatörün en az bir işleneni float ise sonuç float,

Değilse, aritmetik operatörün en az bir işleneni long ise sonuçlong,

Aksi taktirde sonuç int tipinde olur.

Yani, int  ve daha küçük tipteki işlenenlerle yapılan aritmetikişlemler muhakkak bir int sonucu üretir.

Daha büyük tipler varsa sonuç en büyük tipten olur.6www.javaturk.org

Page 7: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 7/29

ArithmeticConversion.java

7www.javaturk.org

Page 8: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 8/29

Tekli Aritmetik Operatörler

Tekli aritmetik operatörler 5 tanedir:+: İşleneni pozitif yapar veya pozitif sayısal değeri gösterir.

Sayılar, bu operatör olmasa da zaten pozitiftirler. 

-: İşleneni negatif yapar veya negatif sayısal değeri gösterir. 

++: Artım operatörüdür, sayısal değeri 1 arttırır. 

--: Eksiltme operatörüdür, sayısal değeri 1 eksiltir.

!: Mantıksal tümleme operatörüdür, boolean bir işlenenintümleyenini alır. 

+ ve -, bir atama vb. operatörlerle birlikte kullanılabilir, aksitaktirde "Not a statement " hatası oluşur. 

+ ve -, ikili aritmetik operatörler gibi en az int sonuç üretir.

8www.javaturk.org

Page 9: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 9/29

Arttırma ve Eksiltme Operatörleri 

++ ve --, işlenenin öncesinde ya da sonrasında kullanılabilir: Öncesinde kullanıldığında, önce arttırma ya da eksiltme

yapılır, sonra işlenenin değeri hesaplanır, 

Sonrasında kullanıldığında, önce işlenenin değeri hesaplanır

sonra arttırma ya da eksiltme yapılır.

9www.javaturk.org

int i = 5;

int j = ++i; // i ve j şimdi 6

j = i++;  // j halen 6 ama i 7 oldu

j = --i; // i ve j şimdi 6; 

j = i--;  // j şimdi de 6 ama i 5 oldu 

Page 10: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 10/29

UnaryOperators.java

10www.javaturk.org

Page 11: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 11/29

Kıyaslama (Relational) Operatörleri 

Kıyaslama (relational ) operatörleri 6 tanedir:4 tane büyüklük kıyaslama operatörü, iki basit sayısal (tam

ya da kesirli sayı) işlenen alır ve boolean bir sonuç üretirler:

>: Büyük müdür?

>=: Büyük eşit midir? 

<: Küçük müdür?

=<: Küçük eşit midir? 

Eşitlik kıyaslayan operatörler iki tane sayısal, boolean ya dareferans işlenen alırlar: 

==: Eşit midir? 

!=: Eşit değil midir?

11www.javaturk.org

Page 12: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 12/29

RelationalOperators.java

12www.javaturk.org

Page 13: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 13/29

Koşullu (Conditional) Operatörler 

Koşullu (conditional ) operatörler, mantıksal ifadelerarasında şartlı olarak boolean sonuç üreten operatörlerdir.

İşlenenler daima boolean ifadeler olmalıdır. 

&: VE (AND)

|: VEYA (OR)

^: DIŞLAYICI (XOR) 

!: DEĞİL (NOT) 

VE ve VEYA’nın, sağ tarafı ihtiyaca bağlı olarakdeğerlendiren, kısa yol (short circuit ) operatörleri de vardır: 

&&: Sağ taraf, ancak sol taraf doğruysa (true) değerlendirilir. 

||: Sağ taraf, ancak sol taraf yanlışsa ( false) değerlendirilir.

13www.javaturk.org

Page 14: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 14/29

Üçlü Koşullu Operatör 

Üçlü koşullu (ternary  conditional ) operatör , "?:" 3 taneişlenen alan tek operatördür. 

İleride ele alınacak olan if-then-else cümlesinin kısaltılmışhalidir.

İlk ifade boolean olmalıdır ve doğru ise ikinci ifade, değil iseüçüncü ifade, atamanın solundaki değere atanır. 

14www.javaturk.org

int i = 8;int j = 11;

int min = (i <= j) ? i : j;

Page 15: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 15/29

Page 16: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 16/29

Bit Seviyesinde Çalışan Operatörler 

Java’da, bit seviyesinde işlem yapan operatörler de vardır. Bu operatörler, işlenenlerin bit yapıları üzerinden çalışır. 

Bit seviyesinde işlem yapan iki operatör grubu vardır: 

Mantıksal 

Kaydırma 

Bu operatörler daha çok, bit seviyesinde işlemlerin

yapıldığı, gömülü (embedded) vb. uygulamalarda kullanılır. 

16www.javaturk.org

Page 17: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 17/29

Mantıksal Bit Operatörler 

Mantıksal bit (bitwise logical ) operatörleri 4 tanedir:&: İki işlenenin bitlerini VE (AND) ile işler, 

|: İki işlenenin bitlerini VEYA (OR) ile işler,

^: İki işlenenin bitlerini DIŞLAYICI (EX-OR) ile işler,

~: Bir işlenenin bitlerinin tümleyenini (değilini) alır. 

Bu operatörler tam sayı tipleri üzerinde işlem yaparlar ve enaz bir int üretirler.

Mantıksal bit operatörleri ile şartlı operatörlerin iki tanesi(& ve |) sembol olarak aynıdır. 

İşlenenler boolean ise sonuç ta boolean, işlenenler tam sayıise sonuç da tam sayı olur. 

17www.javaturk.org

Page 18: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 18/29

BitwiseLogicalOperators.java

18www.javaturk.org

Page 19: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 19/29

Kaydırma (Shift) Operatörleri 

Kaydırma (shift ) operatörleri, işlenenin bit dizisini, verilenmesafe kadar sağa ya da sola kaydırırlar. 

Kaydırma operatörlerinin işlenenleri tam sayı olmalıdır: 

>>: Girilen sayı kadar sağa kaydırma yapar, 

<<: Girilen sayı kadar sola kaydırma yapar,

>>>: Girilen sayı kadar sağa, işaretsiz kaydırma yapar.

Bu operatörler tam sayı tipleri üzerinde işlem yaparlar ve enaz bir int üretirler.

Bir sayıyı sağa kaydırmak onu 2’ye bölmek, sola kaydırmakise onu 2 ile çarpmak demektir.

19www.javaturk.org

Page 20: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 20/29

ShiftOperators.java

20www.javaturk.org

Page 21: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 21/29

Öncelik ve Değerlendirme Sırası 

Birden fazla operatör aynı cümlede kullanılırsa hangisininönce çalışacağı, öncelik sırası ( precedence) ile, operatörünbirden fazla işleneni varsa, hangisini önce işleyeceği isedeğerlendirme sırası (associativity ) ile belirlenir.

21www.javaturk.org

2 + 8 * 5 => 2 + (8 * 5) // Predecence

a = b = c = 4 => a = (b = (c = 4)) // Associativity 

Page 22: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 22/29

Öncelik (Precedence) I

Bir operatör değerlendirilmeden önce işlenenlerideğerlendirilir: 

Bunun istisnası &&, || ve ?: operatörleridir.

Öncelik sıralamasında daha yukarıda olan operatörler daha

aşağıda olanlardan önce değerlendirilirler. 

Aynı önceliğe sahip operatörler aynı ifadedebulunuyorlarsa, değerlendirme sırası soldan sağa olur. 

İfadede bulunan parantezler, değerlendirmede önceliğesahiptirler.

Bir metot çağrısında parametreler, soldan sağadeğerlendirilir. 

22www.javaturk.org

Page 23: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 23/29

Öncelik II

Öncelik sırasını ezbere bilmek gerekli değildir, bu konudakiilkelerin bilinmesi önemlidir.

Ayrıca öncelik sırasını bilmeyi gerektiren kod yazmak ise iyibir uygulama değildir. 

Aslolan, olabildiğince fazla satır ve parantez kullanarakokunabilir kod yazmaktır. 

23www.javaturk.org

int a = 6;

int b = 5;

int c = 10;

float rs = a + ++b * c / a * b;

 boolean b1 = false, b2 = true, b3 = true;

 boolean bool = b1 & b2 | b3;

Page 24: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 24/29

Değerlendirme Sırası (Associativity) 

Sonra gelen arttırma ve eksiltme operatörleri dışında bütüntekli operatörler, sağdan sola doğru işlerler.

Bütün ikili operatörler soldan sağa doğru işlerler, 

Bunun tek istisnası ise atama (=) operatörüdür. 

Birleşik atama operatörleri de bu şekilde davranır. 

24www.javaturk.org

int i = 8; // From right to left

i = i++; // From right to left

i = ++i; // From left to right

a = b = c = 4 => a = (b = (c = 4))

System.out.println(«Java» + 1 + 2);

System.out.println(1 + 2 + «Java»);

Page 25: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 25/29

25www.javaturk.org

Operator  Description  Level   Associativity  []  access array element 

1  left to right .  access object member 

()  invoke a method ++  post-increment --  post-decrement ++  pre-increment 

2  right to left --  pre-decrement +  unary plus -  unary minus !  logical NOT ~  bitwise NOT ()  cast 

 3  right to left new  object creation 

* multiplicative  4  left to right / 

% + -  additive 

5  left to right +  string concatenation << >> 

shift  6  left to right >>> 

< <= relational type comparison 

7  left to right > >= instanceof  

== equality   8  left to right 

!= &  bitwise AND  9  left to right ^  bitwise XOR   10  left to right |  bitwise OR   11  left to right &&  conditional AND  12  left to right ||  conditional OR   13  left to right ?:  conditional  14  right to left 

= += -= 

assignment  15  right to left *= /= %= 

&= ^= |= 

<<= >>= >>>= 

Page 26: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 26/29

Sayısal Yükseltmeler 

Sayısal yükseltmelerin (numeric  promotion), bellioperatörlerde, işlenenlerin tiplerini, en az bir int sonuçüretecek şekilde yükselttiğini daha önce belirtmiştik 

Aritmetik yükseltmelerin iki türü vardır: 

Tekli operatörlerde yükseltme

İkili operatörlerde yükseltme 

26www.javaturk.org

Page 27: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 27/29

Tekli Yükseltme

Eğer tekli operatörün işleneni int ’den daha küçük bir tip ise,işlenenin tipi int ’e yükseltilir, aksi taktirde yükseltmeyapılmaz. 

Tekli yükseltme şu operatörlerde yapılır:

+, -, ~,

>>, <<, >>>: Bu operatörlerde yükseltme ayrı ayrı yapılır, yanikayacak sayı long ise mesafe de long olmaz, sadece int ’eyükseltilir. 

Dizi indekslerinde (array index) içinde ve dizi büyüklüklerinde(array size), «[]» içinde

Diğer tür operatörlerde, örneğin ++ ve --’de, yükseltmeyapılmaz. 

27www.javaturk.org

Page 28: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 28/29

İkili Yükseltme 

İki işlenen alan operatörlerde, işlenenlerden birisinin tipidouble ise diğeri de double, değilse, birisinin tipi float isediğeri de float , değilse, birisinin tipi long ise diğeri de long,değilse ikisi de gerekiyorsa int tipine yükseltilir.

Şu ikili operatörlerde yükseltme yapılır: 

“+”, “-”, “*”, “/”, “%”, 

“<", "<=", ">“, “>=”, “==”, “!=”, 

bit operatörleri “&”, “^”, “|” 

Bazı durumlarda “?”de de yükseltme yapılır. 

28www.javaturk.org

Page 29: 4. Bölüm Operatörler

8/7/2019 4. Bölüm Operatörler

http://slidepdf.com/reader/full/4-boeluem-operatoerler 29/29

Özet

Bu bölümde Java’nın operatörlerini işledik. Tekli ve ikili operatörlerle bir tane olan üçlü operatörü ele

aldık. 

Operatörlerin çalışmasında sayısal tiplerle ilgili en az int

olacak şekilde bazı tip yükseltmeleri yaptığını gördük. 

Benzer şekilde operatörlerin çalışmasında, işlenenlerini elealırken sıraya önem verdiğini de gördük. 

Operatörlerin, aynı ifadede kullanıldığında önceliksıralarının önemli olduğunu gördük. 

29j t k