1. Skip to Menu
  2. Skip to Content
  3. Skip to Footer>

Eşitlik ve Atama operatörleri

PDF Yazdır e-Posta

Written by Admin

Posted on 07 Eylül 2010

Son Güncelleme 07 Eylül 2010

EŞİTLİK VE ATAMA OPERATÖRLER

İGenelde ne kadar tecrübeli olursa olsun, C programcılarının yaptıkları bir hata vardır.Bu sebepten bu hataya ayrı bir kısım ayırmayı uygun gördük. Bu hata, == ( eşitlik ) ve = ( atama ) operatörlerinin karıştırılmasından kaynaklanır. Bu hata, bir yazım hatasından daha ciddidir çünkü bu hataların yer aldığı ifadeler doğru bir biçimde derlenirler ancak çalışma zamanında programın hatalı sonuçlar üretmesine sebep olurlar.

Operatörler İşeyiş Biçimleri Tipleri
( ) soldan sağa parantez
++ -- + - ! sağdan sola tekli
* / % soldan sağa multiplicative
+ - soldan sağa additive
< >= > >= soldan sağa karşılaştırma
= = != soldan sağa eşitlik
&& soldan sağa mantıksal ve
|| soldan sağa mantıksal veya
?: sağdan sola koşullu
= += -= *= /= %= sağdan sola atama
, soldan sağa
virgül


     Şekil 4.16 Operatörlerin öncelikleri ve işleyiş biçimleri

C'nin bu tür hataları üretmesinin iki sebebi vardır. Bunlardan birincisi, C'de değer üretebilen herhangi bir deyimin, kontrol yapılarının karar kısımlarında kullanılabilmesidir. Eğer değer 0 ise yanlış olarak değerlendirilir. Eğer değer sıfırdan farklı ise doğru olarak kabul edilir. İkinci sebep ise C'de atamaların bir değer üretmesidir. Bu değer, atama operatörünün solundaki değerdir. Örneğin,

1
2
if ( puan == 4)
printf ( "Bonus kazandınız\n" );

yazmak isterken yanlışlıkla

1
2
if ( puan = 4)
printf ( "Bonus kazandınız\n" );

yazdığımızı düşünelim.

İlk if ifadesi, eğer kişinin puanı 4 ise o kişiye bonus vermektedir. İkinci if ifadesi ise yanlış bir biçimde yazıldığından, öncelikle atama operatörünün değerini hesaplar. Bu değer sıfırdan farklı bir değer olduğundan, doğru olarak kabul edilir. Bu da, if yapısının sürekli doğru olarak çalışması ve kişinin puanı kaç olursa olsun kişiye bonus verilmesi hatasına sebep olur.

    Genel Programlama Hataları 4.8
    == operatörünü atama ya da = operatörünü eşitlik için kullanmak.

Programcılar x ==7 gibi koşulları sabit değer sağda, değişken ismi solda olacak şekilde, 7 == x biçiminde yazarlar. Böylece, == operatörünü yanlışlıkla = operatörüyle karıştırmaktan kurtulurlar. Derleyiciler, bu yazım hatasını tespit edebilirler çünkü bir atama işleminde değişken ismi yalnızca değişkenin solunda bulunabilir. En azından böylelikle, çalışma zamanlı bir hata yapma ihtimali ortadan kalkmış olur.

Değişken isimleri, sol taraf değeri olarak adlandırılırlar çünkü değişken isimleri atama işlemlerinde operatörün solunda bulunurlar. Sabit değerler ise sağ taraf değeri olarak adlandırılırlar çünkü yalnızca atama operatörünün sağında bulunabilirler. Sol taraf değerleri, sağ taraf değeri olabilir ancak bunun tersi geçerli değildir.

    İyi Programlama Alıştırmaları 4.18
    Eşitlik deyimi, x == 1 gibi bir değişken ismi ve bir sabit içerdiğinde,bazı programcılar deyimi sabit değer solda, değişken ismi sağda bulunacak şekilde yazarak, yanlışlıkla == operatörüyle = operatörünü karıştırmaktan kaynaklanabilecek mantık hatalarını engellerler.

Madalyonun öteki yüzü de aynı biçimde can sıkıcıdır. Programcının bir değişkene sabit bir değer atamak istediğini düşünelim:

x = 1;

yazacağına yanlışlıkla

x ==1;

yazması bir yazım hatası oluşturmaz. Derleyici, karşılaştırma deyimini hesaplar. Eğer x, 1'e eşitse koşul doğrudur ve deyim, 1 değerini döndürecektir. Eğer x, 1'e eşit değilse koşul yanlış olacaktır ve deyim, 0 değerini döndürecektir. Hangi değer döndürülürse döndürülsün, atama operatörü bulunmadığından değer kaybolacak ve x değişmeden kalacaktır. Bu da muhtemelen çalışma zamanlı bir mantık hatası üretecektir. Maalesef , bu problemi ortadan kaldıracak bir yola sahip değiliz.

Operatörler

İşleyiş Biçimleri

Tipleri

++

--

+

-

!

(tip)

Sağdan sola

tekli

*

/

%

 

 

 

Soldan sağa

çarpım

+

-

 

 

 

 

Soldan sağa

toplam

< 

<=

> 

>=

 

 

Soldan sağa

karşılaştırma

==

!=

 

 

 

 

Soldan sağa

eşitlik

&&

 

 

 

 

 

Soldan sağa

mantıksal ve

||

 

 

 

 

 

Soldan sağa

mantıksal veya

?:

 

 

 

 

 

Sağdan sola

koşullu

=

+=

-=

*=

/=

%=

Sağdan sola

atama

,

 

 

 

 

 

Soldan sağa

virgül