Anda di halaman 1dari 15

Temel Operatrler

Bir ileme yola aan ve ilem sonucunda bir deer retilmesini salayan atomlara operatr denir.
Operatrler 3() biimde snflandrlabilabilirler:

1. levlerine sre snflandrma

2. Operand saylarna gre snflandrma

3. Operatrn konumuna gre snflandrma

1. levlerine gre snflandrma: Bu snflandrmada operatrn ne amala kullanldna baklr. Buna


gre ilevlerine gre operatrleri aadaki gibi gruplandrabiliriz:

Aritmetik operatrler (arithmetic operators)

Karlatrma operatrleri (comparison operators)

Mantksal operatrler (logical operators)

Bitsel operatrler (bitwise operators)

zel amal operatrler (special purpose operators)

2. Operand saylarna gre snflandrma: Operatrle ileme sokulan ifadelere operand denir. Operand
saylarna gre operatrleri aadaki gibi gruplandrabiliriz:

Tek operandl operatrler (unary operators)

ki operandli operatrler (binary operators)

operandl operatrler (ternary operators)

3. Operatrn konumuna gre snflandrma: Bu snflandrmada operatrn operand(lar)nn neresinde


olduuna baklr. ekilde gruplandrlabilir:

nek operatrler (prefix operators)

Araek operatrler (infix operators)

Sonek operatrler (postfix operators)

Operatrlerin teknik olarak tanmlanabilmesi iin bu snflandrmada nereye dt belirtilmelidir.


Bundan sonra operatre ilikin ilave baz zellikler belirtilmelidir. rnein + operatr iki operandli araek
durumunda bir aritmetik operatrdr. Ya da rnein ! operatr tek operand nek durumunda mantksal
bir operatrdr. Ayrca bu operatrn operand boolean trden bir ifade olmaldr ve rettii deer de
boolean trdendir gibi

Farkl ilevleri olan operatrlere ilikin atomlar ayn olabilmektedir. rnein + karakteri hem toplama
operatr hem de iaret operatr olarak kullanlmaktadr.
Operatrler Arasndaki ncelik likisi

Her operatrn dierine gre bir ncelik durumu (precedence) vardr. rnein * operatr + operatrnden
daha yksek nceliklidir. Operatrlerin bazlar eit ncelikte olabilirler. lemler genel olarak ncelik
srasna gre yaplr. rnein:

i yaplan ilemi temsil etmek zere;


a = b + c * d;

ileminin yapl

i1: c * d
i2: b + i1
i3: a = i2
eklindedir.

( ) parantezler kullanlarak nceliklendirme salanabilir. rnein:


a = (b + c) * d;

ilemi

i1: b + c
i2: i1 * d
i3: a = i2
eklinde yaplr.

Operatrler arasndaki ncelik ilikisi operatr ncelik tablosu denilen bir tabloyla betimlenir. rnein:

Operatr likisi

() Soldan saa

*/ Soldan saa

+- Soldan saa

= Sadan sola

ncelik tablosunda yukardaki satrlar aadaki satrlara gre yksek nceliklidir. Ayn satrdakiler eit
nceliklidir. Eit ncelikli operatrler ifade ierisindeki konumlarna gre soldan saa (left associative) ya
da sadan sola (right associative) ncelikli olarak yaplrlar. rnein:
a = b * c / d;

Burada * ve / operatrleri eit ncelikli olduundan ve bu operatrler soldan saa ncelikli olduundan
ilemler

i1: b * c
i2: i1 / d
i3: a = i2
eklinde yaplr.
*, /, + ve operatrleri

Bu operatrler iki operandl araek durumunda aritmetik operatrlerdir. Matematikteki klasik 4(drt) ilemi
yaparlar. rnein:
package csd;

class App {
public static void main(String [] args)
{
int a, b, c;

a = 10;
b = 5;

c = a + b;

System.out.println(c);

c = a * b;
System.out.println(c);

c = a / b;
System.out.println(c);

}
}

% operatr

Bu operatre mod operatr de denmektedir. Operatr sol taraftaki operandn sa taraftaki operanda
blmnden elde edilen kalan deerini retir.
package csd;

class App {
public static void main(String [] args)
{
int a, b, c;

a = 10;
b = 5;

c = a % b;

System.out.println(c);
}
}
% operatrnn rettii deer iin blme ilemi yapldndan operatr ncelik tablosunda * ve / operatr
ile soldan saa ncelikli grupta bulunmaktadr.

Operatr likisi

() Soldan saa

*/% Soldan saa

+- Soldan saa

= Sadan sola
aret + ve aret operatrleri

aret + ve iaret operatrleri tek operandl nek durumunda aritmetik operatrlerdir. aret operatr
operandnn negatif deerini retir.
package csd;

class App {
public static void main(String [] args)
{
int a, b;

a = 10;

b = -a;

System.out.println(a);
System.out.println(b);
}
}

aret + operatr operand ile ayn deeri retir. Yani aslnda hibir ilem yapmaz.
package csd;

class App {
public static void main(String [] args)
{
int a, b;

a = 10;

b = +a;

System.out.println(a);
System.out.println(b);
}
}

aret + ve iaret operatrleri ncelik tablosunun ikinci dzeyinde sadan sola grupta bulunurlar.

Operatr likisi

() Soldan saa

+- Sadan sola

*/% Soldan saa

+- Soldan saa

= Sadan sola

++ ve -- Operatrleri

++ operatrne artrma (increment) -- operatrne eksiltme (decrement) operatr denir. Bu operatrler tek
operandl nek ve sonek olarak kullanlabilen aritmetik operatrlerdir. ++ operatr operandn deerini
1(bir) artrr, -- operatr operandn deerini 1(bir) eksiltir. Bu operatrler ncelik tablosunun ikinci
dzeyinde sadan sola grupta bulunurlar.
Operatr likisi

() Soldan saa

+ - ++ -- Sadan sola

*/% Soldan saa

+- Soldan saa

= Sadan sola

Bu operatrlerin nek ve sonek kullanmlar farkldr. Bu operatrlerin hem nek hem de sonek kullanmlar
tabloda belirtilen ncelikle yaplr. Ancak nek kullanmda sonraki ileme deikenin artrlm ya da
eksiltilmi deeri sokulurken, sonek kullanmda deikenin artrlmam ya da eksiltilmemi deeri sokulur.
Yani ++ ve -- operatrlerinin nek kullanmlarnda rettikleri deerler srasyla artrlm ve eksiltilmi
deerlerdir, sonek kullanmlarnda rettikleri deerler de srasyla artrlmam ve eksiltilmemi deerlerdir.
rnein:
package csd;

class App {
public static void main(String [] args)
{
int a, b;

a = 10;

b = ++a;

System.out.println(a); // 11
System.out.println(b); // 11
}
}

rnein:

package csd;

class App {
public static void main(String [] args)
{
int a, b;

a = 10;

b = a++;

System.out.println(a); // 11
System.out.println(b); // 10
}
}

++ ve -- operatrlerinin operandlar deiken olmaldr. Yani rnein:

b = 8++; //error
ifadesinde ++ operatrnn operand sabit olduundan ifade geersizdir.

Anahtar Notlar: C/C++ dillerinde ++ ve -- operatrleri ile bu operatrlerin operandlarnn ayn ifadede
bulunmas tanmsz davrana (undefined behaviour) yol amaktadr. Java' da herhangi bir sorun
bulunmamaktadr. Derleyicinin tanmsz davran C/C++ standartlarna gre ksaca ne olaca belli olmayan
durumlar iin kullanlmaktadr. Yani bu dillerde programc tanmsz davrana yol aacak kodlardan
kanmaldr anlamna gelmektedir. Java' da tanmsz davrana yol aacak hi bir durum yoktur. Yani Java'
da bir ifade ya geerli ya da geersiz (error) olmaktadr.

Bilindii gibi Java' da atomlar arasnda istenildii kadar boluk braklabilir. Atomlar istenildii kadar
bitiik yazlabilir. Anahtar szckler ve deikenler bitiik yazlamaz kurallar geerlidir. Peki aadaki
gibi bir ifadeyi derleyici nasl alglayacaktr?
a = b+++c;
Yani derleyici bu ifade iin, a = b + ++c; biiminde mi yoksa a = b++ + c; biiminde mi ilem
yapacaktr? Burada derleyici derleme srasnda anlaml en uzun ifadeyi seer. Yani a = b++ + c biiminde
ilem yaplacaktr. rnek bir test kodu aadaki gibi yazlabilir:
package csd;

class App {
public static void main(String [] args)
{
int a, b, c;

a = 10;
b = 8;

c = a+++b; // c = a++ + b;

System.out.println(a); //11
System.out.println(b); //8
System.out.println(c); //18
}
}

Karlatrma Operatrleri

Toplam 6(alt) adet karlatrma operatr vardr. Bu operatrler iki operandl araek durumunda
operatrlerdir. Karlatrma operatrleri boolean trden deer retirler. Bu operatrler ncelik tablosunda
artimetik operatrlerden daha dk ncelikli gruptadr.

Operatr likisi

() Soldan saa

+ - ++ -- Sadan sola

*/% Soldan saa

+- Soldan saa

><>= <= Soldan saa

== != Soldan saa

= Sadan sola
rnein:

package csd;

class App {
public static void main(String[] args)
{
int a, b;

a = 10;
b = 8;

boolean result;

result = a >= b;

System.out.println(result); //true
}
}

Bu operatrlerden == operatr eitlik karlatrmas yapar. Operandlar birbirine eitse true deilse false
deerini retir. rnein:

package csd;

class App {
public static void main(String[] args)
{
int a, b;

a = 8;
b = 8;

boolean result;

result = a == b;

System.out.println(result); //true
}
}

Benzer ekilde != operatr operandlarnn eitsizlii durumunda true eitlii durumunda false deerini
retir. rnein:

package csd;

class App {
public static void main(String[] args)
{
int a, b;

a = 8;
b = 8;

boolean result;

result = a != b;
System.out.println(result); //false

}
}

Yani bu iki operatr birbirlerinin mantksal olarak tersleridir.

Benzer ekilde < operatrnn mantksal tersi >= operatr ve > operatrnn mantksal tersi de <=
operatrdr.

Mantksal Operatrler

Java' da 3() adet mantksal operatr vardr. Bunlar

&& mantksal ve (logical AND)


|| mantksal veya (logical OR)
! mantksal deil (logical NOT)

operatrleridir.

&& ve || operatrleri iki operandl araek durumunda, ! operatr tek operandl nek durumunda
operatrlerdir. Mantiksal operatrlerin operandlar boolean trden olmak zorundadr. rettikleri deerler de
boolean trdendir. rettikleri deerler yledir:

&& ve || operatrleri
A B A && B A || B

True True True True

True False False True

False True False True

False False False False

! operatr
A !A

True False

False True

&& ve || operatrleri ncelik tablosunda karlatrma operatrlerinden daha dk ncelikli soldan saa
grupta bulunmaktadrlar. ! operatr ncelik tablosunun ikinci dzeyinde sadan sola grupta bulunmaktadr.

Operatr likisi

() Soldan saa

+ - ++ -- ! Sadan sola
*/% Soldan saa

+- Soldan saa

><>= <= Soldan saa

== != Soldan saa

&& Soldan saa

|| Soldan saa

= Sadan sola

rnein:

package csd;

class App {
public static void main(String[] args)
{
boolean result;

result = Sample.foo() && Sample.bar();

System.out.println(result);
}
}

class Sample
{
public static boolean foo()
{
System.out.println("foo");

return true;
}

public static boolean bar()


{
System.out.println("bar");

return false;
}
}

rnein:

package csd;

class App {
public static void main(String[] args)
{
boolean result;

result = Sample.bar() || Sample.foo();


System.out.println(result);
}
}
class Sample
{
public static boolean foo()
{
System.out.println("foo");
return true;
}

public static boolean bar()


{
System.out.println("bar");
return false;
}
}

&& ve || operatrlerinin ksa devre (short circuit) zellikleri vardr. Bu operatrler klasik ncelik kurallarna
uymazlar. Bu operatrlerin sa tarafnda ne olursa olsun nce sol tarafndaki ifade yaplr ve bitirilir.
Duruma gre sa tarafndaki ifade yaplr. Mantksal AND ve mantksal OR ilemleri ksaca yle
tanmlanabilir:

Mantksal AND: fadelerden her ikisi birden true ise sonu true, dier btn durumlarda false.

Mantksal OR: fadelerden her ikisi birden false ise ilem false, dier btn durumlarda true.

Bu tanmlara gre, && operatr iin sol tarafndaki ifade false ise sa taraf ne olsun sonucu
etkilemeyecektir. Benzer ekilde || operatr iin de sol tarafndaki ifade true ise sa taraf ne olursa olsun
sonu deimez. Bu sebeple && operatrnn sol taraf false ise sa taraf hi yaplmaz, || operatrnn sol
taraf true ise sa taraf hi yaplmaz.

rnein:

package csd;

class App {
public static void main(String[] args)
{
boolean result;

result = Sample.bar() && Sample.foo();

System.out.println(result);
}
}

class Sample
{
public static boolean foo()
{
System.out.println("foo");

return true;
}

public static boolean bar()


{
System.out.println("bar");

return false;
}
}

Grld gibi bar metodunun geri dn deeri false olduundan ksa devre zelliinden dolay foo
metodu arlmamaktadr.
rnein:
package csd;

class App {
public static void main(String[] args)
{
boolean result;

result = Sample.foo() || Sample.bar();

System.out.println(result);
}
}

class Sample
{
public static boolean foo()
{
System.out.println("foo");

return true;
}

public static boolean bar()


{
System.out.println("bar");

return false;
}
}

Aslnda ksa devre zellii farkl bir sonucun kmasna yol amaz. ncelik tablosu tam olarak uygulanrsa
kacak sonu ayndr. Ksa devre zellii ile bu sonu daha hzl elde edilir.

Java' da & ve | operatrleri bit dzeyinde AND ve OR ilemlerini yapar. Bu operatrler iki operandl araek
durumunda soldan saa ncelik grubunda operatrlerdir.

Operatr likisi

() Soldan saa

+ - ++ -- ! Sadan sola

*/% Soldan saa

+- Soldan saa

><>= <= Soldan saa

== != Soldan saa

& Soldan saa

| Soldan saa

&& Soldan saa

|| Soldan saa

= Sadan sola

Bu operatrler saynn karlkl bitlerini AND ve OR ilemlerine sokarlar. Bu operatrlerin Java' da asl
kullanmlar bit ilemleri olmasna karn boolean trden operandlarla da ileme sokulabilir. & ve |
operatrlerinin ksa devre zellii yoktur. Bu sebeple boolean trden operandlar ile ksa devre zellii
olmayan mantksal AND ve OR operatrleri gibi de kullanlabilirler.
.
! operatr tek operandl nek durumunda bir operatrdr. ! operatrnn operand boolean trden olmak
zorundadr. Bu operatr operandnn mantksal olarak tersini retir. Yani operandnn deeri true ise false,
false ise true deerini retir. rnein:
package csd;

class App {
public static void main(String[] args)
{
boolean a, b;

a = true;

b = !a;

System.out.println(a); // true
System.out.println(b); // false
}
}

Atama Operatr

Atama operatr iki operandl araek durumunda sadan sola ncelik gurubunda bulunan operatrdr. Bu
operatr en dk ncelikli operatrdr.

Operatr likisi

() Soldan saa

+ - ++ -- ! Sadan sola

*/% Soldan saa

+- Soldan saa

><>= <= Soldan saa

== != Soldan saa

& Soldan saa

| Soldan saa

&& Soldan saa

|| Soldan saa

= Sadan sola

rnein:

package csd;

class App {
public static void main(String[] args)
{
int a, b;

b = 10;
a = b;

System.out.println(a); //10
System.out.println(b); //10
}
}

Atama operatrnn rettii deer sol taraftaki deikene atanan deerdir.

lemli Atama Operatrleri

Java' da bir grup *=, /=, +=, -= biiminde ilemli atama operatrleri vardr. Bu operatrler iki operandl
araek durumunda sadan sola ncelik grubunda operatrlerdir. Bu operatrler atama operatr ile ayn
ncelik grubunda bulunurlar.

Operatr likisi

() Soldan saa

+ - ++ -- ! Sadan sola

*/% Soldan saa

+- Soldan saa

><>= <= Soldan saa

== != Soldan saa

& Soldan saa

| Soldan saa

&& Soldan saa

|| Soldan saa

= *= /= += -= Sadan sola

a <op>= b ifadesi a = a <op> b ile tamamen ayn anlamdadr. rnein:

package csd;

class App {
public static void main(String[] args)
{
int a, b;

a = 10;
b = 8;

a += b; // a = a + b

System.out.println(a); //18
System.out.println(b); //8
}
}
Java programlama dilinin tm operatrlerine ilikin ncelik tablosu aadaki gibidir.

Operatr likisi

( ) . [] new Soldan saa

+ - ++ -- ! ~ ( ) Sadan sola

*/% Soldan saa

+- Soldan saa

<< >> >>> Soldan saa

> < >= <= instanceof Soldan saa

== != Soldan saa

& Soldan saa

^ Soldan saa

| Soldan saa

&& Soldan saa

|| Soldan saa

?: Sadan sola

= *= /= %= += -= <<= >>= &= ^= |= >>>= Sadan sola

Bu blmde anlatlmayan operatrler iin bir takm konularn da bilinmesi gerektiinden bu operatrler
daha sonra ele alnacaktr.

Etkisiz fadeler

Java' da bir durum deiikliine yol amayan kodlara etkisiz kodlar (code has no effect) denir. Etkisiz kod
oluturmak Java'da genel olarak geersizdir. Etkisiz kodlar derleme zamannda hata (error) oluturur.

a * b; //error: Etkisiz kod. Bu kod olmasa da programda deien bir ey olmaz.

Ancak
++a; //Geerli
foo() // Geerli

phesiz metod arlmas bir etkiye yol amaktadr.


Anahtar Notlar: C/C++ dillerinde etkisiz kodlar genel olarak hata (error) oluturmaz.

Noktal Virgln levi


Noktal virgl ifadeleri birbirinden ayrmak iin kullanlmaktadr. Noktal virgl ile sonlandrlan ifadeler
birbirinden bamszdr. Eer noktal virgl unutulursa nceki ifade ile sonraki ifade tek bir ifade olarak ele
alnr. Bu da ou zaman hata (error) oluturur. rnein:

a = 10 //error
b = 20;

Burada ifadenin tamam anlamsz olduundan hata oluturur.

fadeleri sonlandran bu tr atomlara sonlandrc (terminator) denmektedir. Baz dillerde ENTER karakteri
sonlandc atom olarak kullanlr. Bu dillerde her satra tek bir ifade yazlmak zorundadr. rnein BASIC
programlama dili bu ekildedir. Java 'da sonlandrc noktal virgldr.

Anda mungkin juga menyukai