Herkese merhabaa. 😊 Bu yazımda mantıksal operatörler ve ternary if yapısını inceleyeceğiz. Mantıksal operatörler genellikle birden fazla durumun doğruluğunu ya da yanlışlığını döndürür. Programlamada kullandığımız mantıksal operatörler mantık operatörleri ile benzerdir. Mantık konusuna ufak bir giriş yaptıktan sonra programlama içerisindeki kullanımını detaylı bir şekilde göreceğiz. Sözü daha fazla uzatmadan mantıksal operatörler konusuyla girişi yapalım.

Mantıksal Operatörler

Mantık

Mantık konusunu elimden geldiğince kısa bir şekilde açıklamaya çalışacağım. Mutlak doğru veya mutlak yanlış olan ifadelere önerme denir. Mantık, herhangi bir önermenin doğru ile yanlış ayrımını yapan disiplindir. Örneğin; “Türkiye’nin başkenti Ankara’dır.” Bu önerme mutlak doğru bir önermedir. “Ankara’nın başkenti Çankaya’dır.” Bu önerme de mutlak yanlış bir önermedir.

Mantıkta önermeler doğruluk dereceleri ile ifade ediliyor. Bir önermenin doğruluk derecesi 1 ise doğru, 0 ise yanlış demektir.

İki önermenin çeşitli bağlaçlarla birbirine bağlanmasıyla oluşan önermelere bileşik önermeler denir. Aslında mantıkta birden fazla bağlaç bulunuyor ancak biz konu kapsamımız gereği Ve () , Veya (v) bağlaçlarını inceleyeceğiz.

Ve Bağlacı ()

p q p ∧ q
1 1 1
1 0 0
0 1 0
0 0 0

Ve bağlacında tabloda görüldüğü gibi iki önermenin de doğruluk derecesi 1 ise 1 sonucunu elde ederiz. Diğer tüm karşılaştırmalarda 0 sonucunu elde ederiz. Örneğin; p önermesi “Ankara Türkiye’nin başkentidir.” olsun. q önermesi de “Ankara’nın başkenti Çankaya’dır.” olsun. Bu durumda p’nin doğruluk derecesi 1, q’nun doğruluk derecesi 0 olacaktır. “Ankara Türkiye’nin başkentidir ve Ankara’nın başkenti Çankaya’dır.” önermesi de yanlış olduğundan sonuç 0 bulunur.

Veya Bağlacı ()

p q p V q
1 1 1
1 0 1
0 1 1
0 0 0

Veya bağlacında görüldüğü gibi iki önermeden en az birinin doğruluk derecesi 1 ise 1 sonucunu elde ediyoruz. Eğer iki önermenin de doğruluk derecesi 0 ise 0 sonucunu elde ederiz. Örneğin; p önermesi “2 asal sayıdır.” olsun. q önermesi de “2 tek sayıdır.” olsun. Bu durumda p’nin doğruluk derecesi 1, q’nun doğruluk derecesi 0 olacaktır. Dolayısıyla “2 asal veya tek sayıdır.” önermesi doğrudur.

C# Mantıksal Operatörler

C# içerisinde ve (&&), veya (||), değil (!) operatörleri yer alıyor. Bunun yanı sıra null coalescing (??) operatörü de çok sık kullanılıyor. Bütün operatörleri yakından incelemeye başlayalım.

Ve Mantıksal Operatörü (&&)

Ve mantıksal operatörü C# içerisinde && karakteri kullanılarak oluşturuluyor. && operatörünü if koşulu içerisinde kullandığımızda şartın gerçekleşmesi için sonucun true olması gerekir. Bu durumda && operatörünün çalışması için sağ ve sol operandlarının true sonuç döndürmesi gereklidir. Kullanımına geçmeden önce doğruluk tablosunu oluşturalım.

Sağ Operand Sol Operand Sonuç
false false false
false true false
true false false
true true true
bool a = false; 
bool b = false;
Console.WriteLine(a&&b);

bool c = false;
bool d = true;
Console.WriteLine(c&&d);

bool e = true;
bool f = false;
Console.WriteLine(e&&f);

bool g = true;
bool h = true;
Console.WriteLine(g&&h);

Ve Operatörü Kullanımı

Veya Mantıksal Operatörü (||)

Veya mantıksal operatörü C# içerisinde || karakterleri kullanılarak oluşturuluyor. || operatörünü if içerisinde kullandığımızda şartın gerçekleşmesi için koşullardan herhangi birinin true olması yeterlidir. Doğruluk tablosunu inceledikten sonra örnek ile pekiştirelim.

Sağ Operand Sol Operand Sonuç
false false false
false true true
true false true
true true true
bool a = false;
bool b = false;
Console.WriteLine(a||b);

bool c = false;
bool d = true;
Console.WriteLine(c||d);

bool e = true;
bool f = false;
Console.WriteLine(e||f);

bool g = true;
bool h = true;
Console.WriteLine(g||h);

Veya Mantıksal Operatörü Kullanımı

Şimdi gelelim mantıksal operatörler ile birlikte kullanılan bitsel operatörlere. & ve | operatörleri bitsel işlem için kullanılsa da karşılaştırma operatörü olarak da kullanılabilir. && operatörü yerine &, || operatörü yerine | kullanabiliriz. Önce && ve || operatörünün çalışma mantığını anlayalım. Bu operatörleri if içerisine koyduğumuzda eğer ilk operandın sonucu false ise diğer operand’ın sonucuna bakmadan if koşulundan çıkar. Her iki operatörün debug adımlarını inceleyelim.

Mantıksal Operatör Debugging

Burada gördüğünüz gibi Condition1() metodu false sonucu döndürdüğü için && (ve) ile kontrol edilen if koşuluna girmeden çıkıyor. Bir altında bulunan || (veya) koşulunda ilk kontrol edilen metod Condition2() true sonucu döndürdüğü için if koşulunun içerisine giriyor.

Bitsel Operatör Debugging

Bitsel operatörleri kullanarak karşılaştırma yaptığımızda ise her iki metodun da içerisine girerek kontrol ediyor. & operatörü ilk önce Condition1() metoduna girerek false sonucunu aldıktan sonra Condition2() metoduna girerek sonucu hesaplıyor. false & true = false sonuç döndürdüğü için if’in içerisine girmiyor. | operatöründe ise true | false = true sonuç döndürdüğü için if’in içerisine giriyor.

Null Coalescing (??)

Null Coalescing C# içerisinde az kullanılan ancak oldukça işlevsel olan operatörlerden birisidir. Değişkenin null olduğu bir durumda alternatif bir sonuç döndürmek için ?? operatörünü kullanabilirsiniz.

NOT: Bildiğiniz gibi int, bool gibi değer tipli değişkenler null değer alamazlar. Sadece referans tipli değişkenler null değer alabilirler. Değer tipli bir değişkenin null değer almasını istiyorsanız int? ya da Nullable<int> gibi bir tanımlama yapabilirsiniz.

int? val1 = null;
int? val2 = 5;

int val3 = val1 ?? 105;
int val4 = val2 ?? 105;

Console.WriteLine($"Val3: {val3}");
Console.WriteLine($"Val4: {val4}");

Null CoalescingBuradaki örnekte gördüğümüz gibi int değişkenlerini null değer alabilecek şekilde tanımlıyoruz. val1 değişkenine null, val2 değişkenine 5 değerini tanımlıyoruz. Null değer alamayacak olan bir değişken olan val3 değişkenine null değer içermiyorsa val1 değerini, null değer içeriyorsa 105 değerini almasını söylüyorum. val1 değeri null olduğu için val3 değişkenine 105 ataması yapılıyor. val4 değişkenine atama yapılırken val2 değişkeni null değer içermediği için 5 ataması yapılıyor.

Ternary If (Kısa If)

Tek satırlık bir if koşulu yazacağımız zaman if() şeklinde uzun yazmaktansa daha sade bir şekilde ternary if yazılabilir. Ternary if yazımına göz attıktan sonra program içerisinde kullanımına bakalım.

koşul ? true : false

Kısa if yazımı bu kadar kolay. 🙂 Tahmin oyunu tasarlayarak daha eğlenceli bir hale getirelim.

Random rnd = new Random();
int age = rnd.Next(100);
int guess = 0;
string message = "";
Console.WriteLine("Yaşı tahmin et. :)");
do
{
    guess = int.Parse(Console.ReadLine());
    message = guess < age ? "Biraz büyük bir sayı gir. :)" : "Biraz küçük bir sayı gir. :)";
    Console.WriteLine(message);
} while (guess != age);
Console.WriteLine("Tebrikler! Bildin. :)");

Gördüğünüz gibi tahmin yaştan küçük olduğunda büyük bir sayı gir, büyük olduğunda da küçük bir sayı gir mesajı yazılıyor.

Mantıksal operatörler, Null Coalescing ve Ternary if kullanımını inceledik. Bu konuların mantığını kavrayarak kod yazımında çok daha pratiklik kazanabilirsiniz. Bir sonraki yazıya kadar kendinize iyi bakın! 😊