C# Koşullu İşlemler (if else)

  • 14
  • (2)
  • (5)
  • 24 May 2017

Temel Koşullar

    
if (koşul1...)
{
    işlemler1...;
}
else if (koşul2...)
{
    işlemler2...;
}
else
{
    işlemler3...;
}
işlemler4...;

Yukarıda çalıştırılan uygulamanın mantığını şöyle listeleyebiliriz

  • Uygulama koşul1 koşulunu kontrol eder. Eğer doğruysa işlemler1 işlemlerini gerçekleştirir. Diğer koşullara bakmadan işlemler4... satırına atlar.
  • Eğer koşul1 yanlış ise koşul2' yi kontrol eder. Eğer doğruysa işlemler2 işlemlerini gerçekleştirir. Ardından işlemler4... satırına atlar.
  • Eğer koşul2 de yanlış ise else bölgesine girip işlemler3 işlemlerini gerçekleştirir. else kendisinden önceki koşullar yanlış ise gerçekleştirilir. Ardından işlemler4... satırına atlar.

Dikkat edilmesi gereken hususlardan biri şudur. Eğer koşula ait işlemler tek bir işlem ise { } parantezleri ile alan belirtmeye gerek yoktur.

if, else if yapısı aşağıdaki kod üzerinden doğrudan açıklanabilir.

    
static void Main(string[] args)
{
    int a = 10;
    if (a < 15)
        Console.WriteLine("Değer 15' den küçük");
    else
        Console.WriteLine("Değer 15' e büyük veya eşit");
    Console.ReadKey();
}
    

Yukarıdaki kodu çalıştırdığınızda ekrana "Değer 15' den küçük" yazdırıldığını göreceksiniz.

if anahtar kelimesinin ardından parantez içerisinde koşul belirtilir. Ardından koşulun doğru olması durumunda çalıştırılacak satırlar yazılır.

Okunan Değere Göre İşlemler

Koşullu işlemlerde çoğunlukla uygulamanın başındaki sabit bir değere göre değil de, kullanıcı tarafından girilen bir değere göre işlem yapmak istenecektir.

    
static void Main(string[] args)
{
    int sayi = 0;
    Console.Write("Sayı girin: ");
    sayi = Convert.ToInt32(Console.ReadLine());
    if (sayi < 10) Console.WriteLine("Sayı tek basamaklı");
    else if (sayi < 100) Console.WriteLine("Sayı iki basamaklı");
    else if (sayi < 1000) Console.WriteLine("Sayı üç basamaklı");
    else Console.WriteLine("Sayı 1000' e eşit veya büyük");
    Console.ReadKey();
}
    

Yukarıdaki örnekte girilen sayı önce int değişken türüne dönüştürülüyor. 10' dan küçükse ilk koşul, o değil de 100' den küçükse ikinci koşul, o değil de 1000' den küçükse üçüncü koşul, o da değilse else içerisindeki kod çalışacaktır.

Burada yazılan if ve else if koşulları birbirine bağlıdır. Yani if gerçekleşmezse else if kontrol edilir. Gerçekleşirse else if koşuluna ve sonrakilere asla bakılmaz.

Eğer koşullar birbirinden bağımsız olursa ortaya şöyle bir sonuç çıkacaktır.

    
static void Main(string[] args)
{
    int sayi = 0;
    Console.Write("Sayı girin: ");
    sayi = Convert.ToInt32(Console.ReadLine());
    if (sayi < 10) Console.WriteLine("Sayı tek basamaklı");
    if (sayi < 100) Console.WriteLine("Sayı iki basamaklı");
    if (sayi < 1000) Console.WriteLine("Sayı üç basamaklı");
    else Console.WriteLine("Sayı 1000' e eşit veya büyük");
    Console.ReadKey();
}
    

if koşulları birbirinden bağımsızdır ve biri çalışsa da diğeri tekrar kontrol edilecektir. Mesela önceki örnekte "54" yazarsanız, 10' dan küçük olmadığı için ilk koşulu atlar, 100' den küçük olduğu için ikinci koşulu doğrular ve ekrana "Sayı iki basamaklı" yazılır.

Ancak bu örnekte ekrana "54" yazarsanız, ilk koşulu yine sağlamaz. İkinci koşulu sağlar (yani 54 100' den küçüktür) ve ekrana "Sayı iki basamaklı" yazılır. Ardından üçüncü koşul da sağlanır. 54 1000' den de küçüktür. Ekrana "Sayı üç basamaklı" satırı da yazılır. else koşulu ise her zaman kendisinden önceki if veya else if ile bağımlıdır. Dolayısı ile else koşulu atlanır. Ancak gerçekleşmemesi gereken fazladan bir işlem gerçekleşmiştir.

Uygulama oluştururken kodlamada dikkat edilmesi gereken hususlardan biri de hiç şüphesiz koşullu işlemlerdir. Algoritmaya göre

Koşulların Mantıksal İşlemleri

if koşullarının hepsi birer bool yani mantıksal değişkendir. Örneğin bir doğrulama işlemini bool bir değişkene atayıp if içerisinde kullanabilirsiniz.

Aşağıdaki örnekte belli isim değişkenlerine karşılık bazı işlemler gerçekleştiriliyor.

    
static void Main(string[] args)
{
    int ahmetRandevu = 3, selimRandevu = 5, ismailRandevu = 1, melisRandevu = 7;
    string isim;
    Console.Write("İsim girin: ");
    isim = Console.ReadLine();
    if (isim == "Ahmet") Console.WriteLine($"{isim} ile randevunuz {ahmetRandevu} gün sonra");
    else if (isim == "Selim") Console.WriteLine($"{isim} ile randevunuz {selimRandevu} gün sonra");
    else if (isim == "İsmail") Console.WriteLine($"{isim} ile randevunuz {ismailRandevu} gün sonra");
    else if (isim == "Melis") Console.WriteLine($"{isim} ile randevunuz {melisRandevu} gün sonra");
    else if (isim == "Ömer" || isim == "Mete") Console.WriteLine($"{isim} ile randevunuz iptal edildi");
    else Console.WriteLine("Randevu kaydı bulunamadı");
    Console.ReadKey();
}
    

Bu örnekte koşullar isim değişkeninin bazı isimler almasına bağlı bazı değişkenleri kullanmaktadır. || operatörü mantıksal bir operatör olup, veya anlamına gelmektedir. Veya koşullarında iki koşuldan biri doğru ise bütün koşul doğru kabul edilir ve koşul çalıştırılır.

Mantıksal operatörlerle ilgili açıklamalara buradan ulaşabilirsiniz.

Bu koddaki koşullar bool türü değişkenlere atanarak yapılırsa ortaya şöyle bir sonuç çıkacaktır.

    
static void Main(string[] args)
{
    int ahmetRandevu = 3, selimRandevu = 5, ismailRandevu = 1, melisRandevu = 7;
    string isim;
    Console.Write("İsim girin: ");
    isim = Console.ReadLine();
    bool ahmetKontrol = isim == "Ahmet";
    bool selimKontrol = isim == "Selim";
    bool ismailKontrol = isim == "İsmail";
    bool melisKontrol = isim == "Melis";
    bool iptalKontrol = isim == "Ömer" || isim == "Mete";
    if (ahmetKontrol) Console.WriteLine($"{isim} ile randevunuz {ahmetRandevu} gün sonra");
    else if (selimKontrol) Console.WriteLine($"{isim} ile randevunuz {selimRandevu} gün sonra");
    else if (ismailKontrol) Console.WriteLine($"{isim} ile randevunuz {ismailRandevu} gün sonra");
    else if (melisKontrol) Console.WriteLine($"{isim} ile randevunuz {melisRandevu} gün sonra");
    else if (iptalKontrol) Console.WriteLine($"{isim} ile randevunuz iptal edildi");
    else Console.WriteLine("Randevu kaydı bulunamadı");
    Console.ReadKey();
}
    

bool ahmetKontrol değişken tanımlama komutudur. bool türünden bir değişken tanımlanır. isim == "Ahmet" ise geri dönüşü bool olan bir karşılaştırma işlemidir.

C# dilinde = operatörü bir değeri diğerine eşitlemek için kullanılır. == operatörü ise iki değeri karşılaştırmak için kullanılmaktadır. ahmetKontrol değişkeni, isim değişkeni "Ahmet" yazısına eşitse true, değilse false değeri alır. if ve else if koşullarının hepsi, değerleri true veya false olan bool değerleridir.

Aşağıdaki örnekte daha karmaşık koşullar tanımlanmıştır.

    
static void Main(string[] args)
{
    short gun, ay, yil;
    Console.Write("Yıl: ");
    yil = Convert.ToInt16(Console.ReadLine());
    Console.Write("Ay: ");
    ay = Convert.ToInt16(Console.ReadLine());
    bool gecersizAy = ay < 1 || ay > 12;
    if (gecersizAy)
    {
        Console.WriteLine("Geçersiz ay girdiniz.");
        Console.ReadKey();
        return;
    }
    Console.Write("Gün: ");
    gun = Convert.ToInt16(Console.ReadLine());
    bool gecersizGun = gun < 1 || gun > 31;
    if (gecersizAy)
    {
        Console.WriteLine("Geçersiz gün girdiniz.");
        Console.ReadKey();
        return;
    }
    bool gun31kontrol = gun == 31;
    bool ay31kontrol = ay == 1 || ay == 3 || ay == 5 || ay == 7 || ay == 8 || ay == 10 || ay == 12; // ay değeri 31 gün çeken aylar mı?
    if (gun31kontrol && !ay31kontrol)
    {
        Console.WriteLine("Girilen ay 31 gün değil.");
        Console.ReadKey();
        return;
    }
    bool gun30kontrol = gun == 30;
    bool ay30kontrol = ay == 4 || ay == 6 || ay == 9 || ay == 11; // ay değeri 30 gün çeken aylar mı?
    if (gun30kontrol && !ay30kontrol && !ay31kontrol)
    {
        Console.WriteLine("Girilen ay 30 gün değil.");
        Console.ReadKey();
        return;
    }
    bool artikYil = yil % 4 == 0; // yıl artık yıl mı?
    bool gun29Kontrol = gun == 29;
    if (gun29Kontrol && !artikYil && !ay30kontrol && !ay31kontrol)
    {
        Console.WriteLine("Girilen ay artık yıllar dışında 29 gün değil");
        Console.ReadKey();
        return;
    }
    Console.WriteLine($"Tarih formatı geçerli: {gun}.{ay}.{yil}");
    Console.ReadKey();
}
    

Her koşul bir bool değişkenine atanarak kullanılmıştır. Örneğin gün değişkeni 31 ise ve ay değişkeni 31 günlük aylardan herhangi biri ise (aylar için veya operatörü kullanılarak) iki koşul aynı anda doğru yani true ise "Girilen ay 31 gün değil" yazısı ekrana yazmaktadır. İki koşulun da aynı anda doğru olduğunu denetlemek için && ve operatörü kullanılmıştır.

|| operatörü koşullardan birinin doğru olması durumunda çalışır. && operatörü ise koşulların hepsinin doğru olması durumda koşulu çalıştırır.

return anahtar kelimesi konsol uygulamalarında Main metodu içinde çalıştırılırsa programı o noktada sonlandırır. Ancak return kelimesi aslında metodu sonlandırmaktadır. Bu program sadece Main metodundan ibaret olduğu için bu metodun sonlanması demek programın sonlanması demektir. Program içerisinde elbette başka metotlar tanımlanıp Main içerisinde çağrılabilmektedir. Hatta birbirleri içerisinde de çağrılabilmektedir. return komutu bu noktalarda metodun sonlanmasını ve bir geri dönüş değeri varsa o değerde dönmesini sağlar.

Ufak Bir Konsol Menüsü

Ekrandan alınan tuş bilgisini ConsoleKeyInfo türünden struct veri türüne atayarak ekrandan alınan tuş bilgisini kullanabilmek mümkün. ConsoleKeyInfo yapısına ait Key özelliği tam olarak hangi tuşa basıldığını verecektir. Klavye üzerinde genellikle sağ kısımda bulunan NumPad1, NumPad2...NumPad0 tuşları ile harflerin hemen üzerinde bulunan sayı tuşları farklı tanımlanmış tuşlardır. Bu sebeple her iki koşul belirtilerek veya mantıksal operatörü kullanılmalıdır.

    
static void Main(string[] args)
{
    Console.WriteLine("1. Ürün Ekle");
    Console.WriteLine("2. Ürün Listele");
    Console.WriteLine("3. Ürün Sil");
    Console.WriteLine("0. Çıkış");
    ConsoleKeyInfo keyInfo = Console.ReadKey(true);
    if (keyInfo.Key == ConsoleKey.NumPad1 || keyInfo.Key == ConsoleKey.D1)
    {
        Console.WriteLine("Ekleme işlemi seçildi");
    }
    else if (keyInfo.Key == ConsoleKey.NumPad2 || keyInfo.Key == ConsoleKey.D2)
    {
        Console.WriteLine("Listeleme işlemi seçildi");
    }
    else if (keyInfo.Key == ConsoleKey.NumPad3 || keyInfo.Key == ConsoleKey.D3)
    {
        Console.WriteLine("Silme işlemi seçildi");
    }
    else if (keyInfo.Key == ConsoleKey.NumPad0 || keyInfo.Key == ConsoleKey.D0)
    {
        Console.WriteLine("Çıkış işlemi seçildi");
    }
    Console.ReadKey();
}
    

ReadKey metodu içerisindeki true parametresi, ekrandan tuş okunduğu zaman basılan tuşun yazılmasını engeller. Uygulamayı çalıştırdığınız zaman aşağıdaki gibi bir çıktı elde edeceksiniz.

İlişkili İçerikler

C# programlama dilinde değere dayalı koşullu işlemler gerçekleştirmek için switch case yapısı son derece kullanışlı ve uygundur.

Paylaşın
Etiket Bulutu