C#'ta karar yapıları [IF-ELSE]

Geçen yazıda değişkenler'i öğrenmiştik.Bu yazıda da karar yapılarından olan If - Else'den bahsedeğiz.Karar yapıları nedir? Gerektiği yerde programın akışını istediğiniz gibi değiştirmenize yarayan yapılardır.Adı üstünde karar yapısı, "X" durumunda ne yapılacağına karar verilir.

If - Else Yapısı

If - Else yapısı programlama hayatınızda en çok kullanacağınız yapılardan biridir.Mantığı ve yazımı ise en basit haliyle aşağıdaki gibidir;


Hemen örnek bir kod yazarak daha iyi anlaşılmasını sağlayabiliriz.Buda yaptıkça alışılacak cinsten bir koddur :)


Yukarı kod sınavdan aldığınız notu girdiğinizde geçip/kaldığınızı hesaplayan bir programdır.Kodda 3 kod hariç diğerlerini önceki yazılarda açıkladık zaten, tekrar yazmaya gerek yok geri dönüp bakabilirsiniz.
KOD 1: Console.ReadLine();
Bildiğiniz gibi bir programın program olabilmesi için mutlaka karşı taraftan veri alması gerekmektedir.Biz şuanda bu veri alışını bu kodla yapıyoruz.Daha önce bu kodun klavyeden girdi almaya yaradığını söylemiştim."Console" sınıfının altında "ReadLine" nesnesi, adı da zaten satır okumak anlamına gelir.Kullanırken hiçbir veri gönderilmez, yani kodu yazdığınızda yanındaki parantezlerin içine birşey yazmazsınız, ama tabiki bunları koymak zorundasınız.
KOD 2: Convert.ToInt32();
Önceki yazıda da dediğim gibi, C#'ta alınan bir veri her zaman string olarak alınır, yani kullanıcı klavyeden 5 girse bile C# bunu string yani 'metin' olarak alır ve bunun sayısal hiçbir değeri yoktur, dolayısıyla matematiksel işlemler yapılamaz.
Kullanımı "Convert.ToInt32();" şeklindedir ve çevrilmek istenen veri parantezler arasına yazılarak gönderilir.Biz burada "Convert.ToInt32(Console.ReadLine());" şeklinde kullandık yani ilk önce Convert.ToInt32(); bölümünde parantez içindeki işlemi yapacak, bu da klavyeden okuma işlemimiz.Klavyeden okuduktan sonra, aldığımız string tipindeki veriyi int tipine çevirerek "not" değişkenine verecek.Peki bizim bu veriyi int tipine dönüştürmek istediğimizi nereden biliyor? Convert.ToInt32(); kısmında "ToInt32" Int tipi veri demek, diğer türleri ise; ToInt16, ToInt64, ToByte, ToChar, ToString'tir. Int16 ve Int64'ün isminde int geçtiğine bakmayın.Int16 = Byte tipi, Int64 = Long tipidir. Buradaki Int; int tipi değişken değil integer(tamsayı)'ın kısaltılmışıdır.
Peki veriyi istediğimiz türe çevirebiliyorsak diğer tiplere ne gerek var demiş olabilirsiniz.Aslında tam olarak böyle değil mesela "umut" kelimesinin sayısal bir değeri yoktur ne yaparsanız yapın int'e çeviremezsiniz.Ama şu yapılabilir; eğer char bir değişkeni byte int yada long tipine dönüştürürseniz char tipi verinin ASCII KOD karşılığını bulursunuz.
KOD 3: IF - ELSE
Gelelim şimdi asıl konumuza, yazının ilk başında gösterdiğim mantıkla yazılmış olduğunu göreceksiniz."Eğer not değişkeni 45'e eşit yada büyük ise ekrana 'Geçtiniz !' yaz değilse 'Kaldınız :(' yaz".Kullanımı ve anlaşılması oldukça basittir.
(not >= 45) kısmındaki ">=" operatör, "not" ve "45" operand'lardır.Mantıksal karşılaştırmalarınızı yapabileceğiniz bazı operatörler ise şunlardır;
== : Eşit
> : Büyük
< : Küçük
>= : Büyük ya da eşit
<= : Küçük ya da eşit
! : Anlamı terse çevirir (!= : Eşit Değil, !>: büyük değil vb.)

IF - IF - ELSE

Arkadaşlar yaptığınız bir kontrolde sadece bir tane if ve bir tanede else koymak zorunda değilsiniz.İstediğiniz kadar if koyabilirsiniz.Bu şekilde çokça kontrol koyduğunuzda dikkat etmeniz nokta şudur; ilk "if"deki şart kontrol edildikten sonra diğer ifleri de kontrol eder.Eğer hepsi şarta uyuyorsa hepsini yazar.Mesela aşağıdaki kod buna bir örnek olabilir;


Şimdi kodumuzu açıklayalım, gördüğünüz gibi %90 oranında bir önceki kodla aynı.Sadece kontrolümüzün içine bir "if" daha ekledik.Bu şartımızla kullanıcının girdiği notun 85'den fazla olup olmadığınız kontrol edeceğiz.Eğer not 85'den yüksekse kullanıcıya çok iyi bir puanla geçtiğiniz söyleyeceğiz.Mesela kullanıcı 55 girdi.Ekranda sadece geçtiniz yazacak çünkü 55 notu 85'den büyük değil, ama eğer kullanıcı 90 girerse bakılacak; not 45'den büyük mü? evet, o halde Geçtiniz yazdırılacak.Sıra diğer kontrole geldiğinde bakılacak; not 85'den büyük mü? evet, o halde çok iyi bir notla geçtiniz yazdırılacak.Böyle bit not girişinde If'lerden herhangi birisi işlendiği için else bölümünü hiç görmeden atlayacaktır.
Eğer yazdığınız kodda şartınızla ilk uyuşma sağlandığında diğerlerini kontrol etmemesini istiyorsanız "Else-If" kullanabilirsiniz.

IF - ELSE IF - ELSE

Kontrolünüzde "Else If" kullandıysanız, ilk olarak if'i kontrol eder, eğer şart doğru ise işlemlerini yapar ve diğer kontrolleri atlar.If kontrolü doğru değilse "Else - If"leri tek tek kontrol eder taki doğru sonuç bulana kadar.Hiç biri doğru değilse else bölümündeki kodu işleyecektir.Tabi varsa, isterseniz bu bölümü koymayabilirsiniz.Buradaki "doğru ise"den kastım; mesela "if(a == b)" kodunda şart bölümündeki ifade eğer doğru ise true değer döndürür yanlış ise false değeri döndürür.Başka bir deyişle, if kontrolünün değeri true ise.
Şimdi isterseniz konunun daha iyi anlaşılabilmesi için bir örnek yapalım ve sınav puanını giren kullanıcının notunun kaç olduğunu bulalım;


Şimdide kodları açıklayalım; diğer bütün kodları bildiğiniz için şuanda sadece if kontrolünü açıklayacağım.
"Kullanıcı notunu 100 girerse buradaki şartların hepsi doğru olur hepsini ekrana yazdırır" diye düşünmüş olabilirsiniz.Hatırlarsanız Else-If kullandığımızda bir kontrol doğru çıktığında diğer kontrolleri hiç görmeden direk atlar demiştim.Burada da işleyiş tam olarak böyle, ama tabiki eğer buradaki kontrollerimizi "else - if" ile değilde sadece if ile yapsaydık kullanıcı 100 girdiğinde hepsini tek tek yazdıracaktı.
Mesela kullanıcımız yaptığımız programa 65 girsin;
Puan(65) 24'den küçük mü? hayır. | Puan 45'ten küçük mü? hayır. | Puan 55'ten küçük mü? hayır. | Puan 70'den küçük mü? evet. O halde notumuz 3 hemen ekrana yazdıralım.
Siz başka notlar deneyerek daha iyi anlayabilirsiniz.Rakamlar kafanızı karıştırmasın, mesela "Kontrole 85 yazmışız ama notu 4 yazdırıyoruz" gibi.Konrolde kullandığımız operatör "<=" (küçük eşit) olsaydı dediğiniz doğru olurdu ama sadece "<" (küçük) kullandığımız için bir birim küçüğünü kontrol eder.Daha fazla kafa karıştırmasam daha iyi olacak sanırım :) İyi Günler.
Umut Coşkun

0 yorum:

Yorum Gönder