Operatörler
Uygulama geliştirilirken bir durum karşılaştırması yapmak isteyebiliriz. Örneğin kullanıcıdan alınan bir bilginin doğruluğunu sınamak isteyebiliriz. Finansman işlemlerinde eksi değerler bir anlam ifade etmeyeceği için kullanıcının girdiği bilginin sıfırdan büyük olup olmadığı gibi bir sınama ilişkisel operatörler yardımıyla sınanabilir.
ilişkisel Operatörler
== Eşittir
!= Eşit değildir
< Büyüktür
> Küçüktür
>= Büyüktür veya eşittir
<= Küçüktür veya eşittir
İlişkisel ve mantıksal operatörler her zaman bool tipinde bir sonuç döndürürler. Dolayısıyla genellikle if deyimi ile birlikte kullanılır.Bir sayı tahmin oyunu yaptığımızı düşünelim ve kullanıcıdan TextBox’a bir sayı girmesini isteyelim. Kullanıcının sayıyı doğru bilip bilmediğini sınayalım:
1 int sayi = 5;
2 int tahmin = Convert.ToInt32(TextBox1.Text)
3 if ( sayi == tahmin )
4 MessageBox.Show(“Tebrikler, bildiniz.”);
5 else
6 MessageBox.Show(“Üzgünüm, bilemediniz.”);
3 nolu satırda görüldüğü gibi bir ilişkisel operatör kullanılarak eşitliğin sağlanıp sağlanmadığı sınanmıştır.
Mantıksal Operatörler
& VE
| VEYA
|| Kısa Devre VEYA
&& Kısa Devre VE
! DEĞİL
Mantıksal operatörler ise iki bool değerini karşılaştırmak için kullanılır.Bunu parola giriş ekranında Kullanıcı Adı ve Parola’nın sınandığı bir örnekte açıklayalım.
1 string KullaniciAdi = txtKullaniciAdi.Text;
2 string Parola = txtParola.Text;
3
4 if( KullaniciAdi == “admin” & Parola == “123” )
5 MessageBox.Show(“Tebrikler, giriş başarılı.”);
6 else
7 MessageBox.Show(“Üzgünüm, giriş başarısız.”)
4 nolu satırda görüldüğü gibi iki adet ilişkisel operatör kullanılmış. KullaniciAdi == “admin” ve Parola == “123”. Daha önce ilişkisel ve mantıksal operatörlerin her zaman bool tipinde değer döndürdüğünden bahsetmiştik. Dolayısıyla bu iki ilişkisel sınamanın bool tipindeki sonuçlarını & mantıksal operatörü ile sınayarak her iki değerinde doğrulunu kontrol etmiş olduk.
Mantıksal Operatörlerin Sonuçları
p q p & q p | q !p
false false false false true
true false false true false
false true false true true
true true true true false
Kısa Devre Operatörler
Kısa devre operatörlerinin normal VE ( & ) ve VEYA ( | ) operatörlerinden çalışma mantığı biraz farklıdır. Normal operatörlerde ne olursa olsun her iki operatörde kontrol edilir. Örneğin normal VE ( & ) operatöründe ilk operatörün sonucu yanlış ( false ) ise ikinci operatörde ne olursa olsun sonuç yanlış ( false ) çıkacaktır. Aynı şekilde VEYA ( | ) operatörü kullanıldığında ilk operatörün sonucu doğru ( true ) ise ikinci operatör ne olursa olsun sonuç doğru ( true ) çıkacaktır. Bu iki durumda da ikinci operatörün kontrol edilmesi gereksizdir. Kısa devre operatörleri ( && , || ) kullanıldığı zaman bu durumlarda ikinci operatör kontrol edilmez. Bu performans artışı sağlayacağı gibi bazı istisnai durumlarda programın hata vermesini de engelleyecektir.
1 string KullaniciAdi = txtKullaniciAdi.Text;
2 string Parola = txtParola.Text;,
if( KullaniciAdi == “admin” & Parola == “123” )
5 MessageBox.Show(“Tebrikler, giriş başarılı.”);
6 else
7 MessageBox.Show(“Üzgünüm, giriş başarısız.”)
Örnekte kullanıcı adı yanlış girilse dahi parola da kontrol edilmektedir. Hâlbuki kullanıcı adı yanlış girilirse parola doğru girilse dahi sonuç yanlış çıkacaktır.
false & true = false
Dolayısıyla parolayı ikinci bir kez kontrol etmeye gerek yoktur. 4. satırdaki VE( & ) operatörünü Kısa Devre VE ( && ) yaparsak kullanıcı adının yanlış girilmesi halinde Parola kontrolü yapılmadan sonuca daha kısa sürede ulaşarak yanlış ( false ) sonucunu döndürecektir.
1 string KullaniciAdi = txtKullaniciAdi.Text;
2 string Parola = txtParola.Text;
3
4 if( KullaniciAdi == “admin” && Parola == “123” )
5 MessageBox.Show(“Tebrikler, giriş başarılı.”);
6 else
7 MessageBox.Show(“Üzgünüm, giriş başarısız.”)
Bu yüzden C#’ta normal VE ( & ) ve VEYA ( | ) operatörlerinden daha çok Kısa Devre ( && ) ve Kısa Devre VEYA ( || ) kullanılmaktadır.
Atama Operatörü
Atama operatörü bir adet eşittir ( = ) dir.
değişken = değer;
Sağdaki değeri soldakine aktarır. Ancak sağdaki değer soldakinin veri tipine uyumlu olmak zorundadır. Değilse, tip dönüştürme işlemi uygulanmalıdır.Ardı ardına değer atama işlemine izin verir.Bir oyun uygulaması geliştirdiğinizi başlangıçta her oyuncuya 30 puan verdiğinizi düşünelim.
byte oyuncu1,oyuncu2,oyuncu3;
oyuncu1 = oyuncu2 = oyuncu3 = 30;
Burada önce oyuncu3’ün değeri 30 olacak, ardından oyuncu2’ye oyuncu3 değeri atanacak ve oyuncu1’e de aynı şekilde oyuncu2’nin değeri atanacak ve sonuçta tüm değişkenler aynı değere sahip olacaktır.
?: Operatörü
?: Operatörü C#’ta oldukça kullanışlıdır. Bu operatör üç parçadan oluşur. Bu yüzden üçlü ( ternary ) operatör de denir. ?: operatörü bazı durumlarda ilerleyen bölümlerde göreceğimiz if-else deyimi yerine kullanılır. ?: operatörü genellikle bir atama operatörü ile beraber kullanılır.
Yazımı şu şekildedir:
değişken = koşul ? doğru kısım : yanlış kısım ;
koşul bölümünde bir değişkenin değeri ilişkisel ve mantıksal operatörler ile sınanır. Sonuç doğru( true ) ise doğru kısım değeri değişkene atanır, sonuç yanlış ( false ) ise yanlış kısım değeri değişkene atanır.
Bir sayının mutlak değerini alacağımızı varsayalım. Önce sayının sıfırdan küçük olup olmadığını kontrol etmemiz gerekir. Eğer sıfırdan küçük ise sayıyı eksi ile çarparız, sıfırdan büyük ise sayının kendi değerini alacağız.
1 int sayi = -5;
2 int mutlakDeger;
3 mutlakDeger = ( sayi < 0 ) ? -1 * sayi : sayi;
Burada mutlakDeger değişkeni sonuç olarak 5’tir. 3 nolu satırda atama yapılmadan evvel sayi’nın sıfırdan küçük olup olmadığı sınanmış sonuç olarak doğru ( true ) çıkmıştır ve ?: operatörünün doğru kısmı çalıştırılmıştır.
Operatörlerin Öncelik Sırası
* / % + - << >> < > <= >= == != & ^ | && || ?: =