Son Haberler
Anasayfa / Yazılım / C# / if else Yapısı

if else Yapısı

If yapısında eğer bir sonuç True ise istediğimiz işlemi yaptırıyorduk, değilse bir alt satırdan devam ediliyordu. if else yapısında ise aslında bir nevi çiftli seçim söz konusu. Yani eğer şartımız sonucu true ise istediğimiz bir işlemi, false ise istediğimiz bir başka işlemi yaptırabiliriz. Örnek olarak şöyle bir şey yapabiliriz.

if (ortalama >= 50)
                Console.WriteLine("Dersi Geçtiniz");
            else
                Console.WriteLine("Dersten Kaldınız");

Bunu şöylede yazabiliriz, genelde tercih edilen bu. Okunması daha kolay ve evrensel olarak kabul edilmiştir.

 if (ortalama >= 50)
            {
                Console.WriteLine("Dersi Geçtiniz");
            }
            else
            {
                Console.WriteLine("Dersten Kaldınız");
            }

Bu kod bloğunda karar yapımda eğer ortalama 50 ve üstü ise Dersi Geçtiniz yazar, değilse Dersten Kaldınız yazar. if kısmı şartın doğruluğunu kontrol ediyor, else kısmı ise yanlışlığını. Yani eğer ilk kısımda TRUE dönerse Dersi Geçtiniz yazacak, FALSE dönerse else kısmındaki kod çalışacak.

UML olarak bunu ifade edersek :

2013040211

C#’da kouşul operatörü olarak ?: kullanılabilir. Bazı yazılımcılar daha pratik olması (yazması açısından) if else yerine bu operatörü kullanmayı tercih ederler. Bu operatör 3 operand alır. Yani yazımında önce koşul belirtilir, daha sonra soru işareti ? gelir. Daha sonra eğer TRUE ise yapılacak işlem ve sonra üst üste iki nokta gelir, bunun sağında da eğer koşul sonucu FALSE ise yapılacak işlem gelir.

Örnek olarak yukarıdaği bu operatörü kullanarak örnek şöyle yapabiliriz.

Console.WriteLine( ortalama >= 50 ? "Dersi Geçtiniz" : "Dersten Kaldınız" );

Burada kodda görüleceği üzere eğer ortalama 50 ve üzeri ise soru işaretinden sonra TRUE olan kısım çalışır, eğer değilse üst üste iki noktadan sonra gelen FALSE kısmı çalışır.

İç İçe if else kullanımı :

Bazen uygulamalarımızda iç içe koşullara ihtiyaç duyabiliriz. Örneğin bir kişinin Final notuna bakıp eğer final notu 50’den az ise ortalaması 50’den yüksek olsa bile geçmesini istemeyebiliriz.

if (ortalama >= 50)
            {
                if (finalNotu >= 50)
                {
                    Console.WriteLine("Dersi Geçtiniz");
                }
                else
                {
                    Console.WriteLine("Final notunuz 50 olmadığı için kaldınız");
                }                   
                
            }
            else
            {
                Console.WriteLine("Ortalama 50 olmadığı için dersten kaldınız");
            }

Burada en üstteki if yapısında koşul ortalamayı kontrol ediyor. Eğer 50 ve üstü ise kendi içindeki yapıya geçiyor. Değilse bir sonraki Else çalışıyor ve “ortalama 50 ve üstü olmadığı için kaldınız” yazıyor. Eğer kendi içindeki yapıdan devam ederse bu seferde Final notunu kontrol ediyor, o da 50 ve üstü ise bu sefer Dersi Geçtiniz yazıyor değilse kendi içinde yer alan else den devam ediyor ve “Final notunuz 50 ve üstü olmadığı için kaldınız” diyor.

if else if yapısı : Bu yapıda da birden çok koşulu kontrol edebiliriz. Örneğin not belli bir not ve onun üzerinde ise o nota karşılık gelen bir yazımsal değeri yazabliriz. Örneğin :

 if (ortalama >= 45)
                Console.WriteLine("Geçer");
            else
                if (ortalama >= 55)
                    Console.WriteLine("Orta");
                else
                    if (ortalama >= 70)
                        Console.WriteLine("İyi");
                    else
                        if (ortalama >= 85)
                            Console.WriteLine("Pekiyi");
                        else
                            Console.WriteLine("Zayıf");

Bu şekilde yapıyı oluşturabiliriz. Ancak ben bu şekilde kullanımı önermiyorum çünkü okunması oldukça zor. Dolayısı ile karar yapılarında mümkün olduğunca {,} parantezleri ile bloklarımızı kuralım. Okunabilirliği çok daha fazla. Bu aynı yapıyı bu şekilde yazarsam :

 if (ortalama >= 45)
            {
                Console.WriteLine("Geçer");
            }
            else if (ortalama >= 55)
            {
                Console.WriteLine("Orta");
            }
            else if (ortalama >= 70)
            {
                Console.WriteLine("İyi");
            }
            else if (ortalama >= 85)
            {
                Console.WriteLine("Pekiyi");
            }
            else
            {
                Console.WriteLine("Zayıf");
            }

Bu şekilde yazmak çok daha mantıklı. Şimdi kodlarımızı açıklayalım, birden fazla koşul olduğu için burada ortalama 45 ve üstü ise “Geçer” yazdırdım. Değilse eğer bir alt blok çalışır orda da eğer ortalama 55 ve üstü ise “Orta” yazdırdım. Bu şekilde sıra sıra bi alt koşul her seferinde konrol eder. Eğer hiç biri değilse en sonra yer alan else mutlaka çalışır ve “Zayıf” yazar.

Şimdi sürekli parantez içinde kullanmak daha iyidir vs dedim. Bu aslında sadece okunabilirlik açısından değil, mantıksal açıdan da oldukça önemlidir. Örneğin aşağıdaki gibi bir kod bloğunda :

if (Sayi1 > 10)
                if (Sayi2 > 10)
                    Console.WriteLine("Sayi1 ve Sayi2  > 10");
        else
           Console.WriteLine("Sayi1 <= 10");

Normalde bu kod bloğuna baktığımızda. İlk satırda Sayi1 kontrol ediliyor ve eğer Sayi1 > 10 ise ikinci satırdaki if kısmında Sayi2 kontrol ediliyor eğer o da 10’dan büyükse hemen bi altındaki satır çalışıyor ve Sayi1 ve Sayi2 > 10 diyoruz. Eğer ilk satırdaki koşul böyle değil ise yani Sayi1 > 10 değilse FALSE dönüyor ve en altta yer alan else bloğu çalışıyor. Ve Sayi1 < 10 dur diyoruz. Ancak aslında bu bizim yapmak istediğimiz işlem. Derleyicimiz bu kod bloğunu bu şekilde çalıştırmıyor. Biz her ne kadar üstteki paragrafta yapmak istediğimi yaptırmak istiyorsam da bu kod bloğuna göre derleyici en sonra yer alan else bloğunu içteki if bloğu ile bağlar. Yani aslında derleyici bu kodu şöyle yorumlar : [csharp]if (Sayi1 > 10) if (Sayi2 > 10) Console.WriteLine("Sayi1 ve Sayi2 > 10"); else Console.WriteLine("Sayi1 <= 10"); [/csharp] Yani böylelikle diyelim ki Sayi1 10'dan büyük bir değer. Hemen bi alta geçer Sayi2 kontrol edilir, diyelim ki bu Sayi2 ise 10'dan küçük bir değer. O zaman bu sefer hemen else kısmına yönelir ve Sayi1 değeri 10'dan küçüktür der. Oysaki küçük olan sayi2 ama derleyicim benim içteki if yapısına bağlı olarak hemen akabindeki else kısmını çalıştırıyor. İşte parantez burada mühim. Oysaki ben yapmak istediğim asıl işlemi en doğru şekilde aşağıdaki gibi yazabilirim. [csharp] if (Sayi1 > 10) { if (Sayi2 > 10) { Console.WriteLine("Sayi1 ve Sayi2 > 10"); } } else { Console.WriteLine("Sayi1 <= 10"); }[/csharp] Görüleceği üzere bu daha doğru bir şekilde yazılmış olur. Hiç bir zaman üşenmeyip parantezleri kullanıyoruz, tembellik yok 🙂 Görüleceği üzere karar yapılarını kullanmak oldukça kolay, bir çok örnek yapılabilir. Bir çok örnekle konuyu daha da uzatabiliriz ancak tabi buna imkan yok. Zamanla diğer yazılar içinde de karar yapılarının diğer kullanım türlerini paylaşmaya devam edeceğim.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir