2.4. if
Deyimi Ve Koşullu İşleç
if
deyimi, if
anahtar sözcüğünün arkasına parantez içine yazılmış bir ifade ve peşinden
gelen bir deyimden oluşur. Tüm bunların arkasında, isteğe bağlı olarak,
bir else
anahtar sözcüğü ve bir deyim bulunabilir.
if
’in bu iki şekli aşağıdaki gösterimde
özetlenmektedir:
if (ifade) deyim
ve
if (ifade) deyim else deyim
İşte else
’i olmayan bir
if
deyimi örneği:
if (yas > 65) { yasli_kisiler++; printf("Yasli bir kisisiniz.\n"); }
Eğer yas
65
’ten büyükse, blok içindeki
deyimler çalıştırılır, aksi takdirde, kontrol doğrudan bir sonraki deyime
geçer. Bu deyimi, her yaştan kişiye hitap edecek şekilde değiştirelim:
if (yas > 65) { yasli_kisiler++; printf("Yasli bir kisisiniz.\n"); } else printf("Henuz yasli bir kisi degilsiniz.\n");
Şimdi, deyiminiz, eğer yas
65
’in üstünde ise,
az önceki deyimle aynı şekilde davranacaktır, aksi takdirde yeni mesaj
görüntülenecektir. Genelde, parantez içine alınmış ifadenin değeri doğru
(sıfırdan farklı) ise, ifadeden sonra gelen deyim işletilir; ifadenin değeri
yanlış (sıfır) ise, else
anahtar sözcüğünden sonra gelen
deyim (varsa) işletilir. Örneklerimizde de görüldüğü gibi, bu deyimler bileşik
deyimler olabilir, bu da bileşik deyimlerin daha önce belirtiğimiz iyi
özelliğidir: Birçok deyimden tek bir deyim oluştururlar. Ayrıca, bileşik deyim
başlatan
karakterinin ifade ile aynı satırda,
onun karşılığı olan {
karakterinin de anahtar
sözcükle aynı sütuna yazıldığına dikkat ediniz. Bu karakterlerin tam
yeri—bloğu doğru bir şekilde ayırdıkları sürece—derleyiciyi
ilgilendirmez, ancak bu şekilde yazmanın programları anlamayı kolaylaştıracağı
inancındayız ve bunu kitap içinde uygulamaya devam edeceğiz.}
Şüphesiz, içiçe if
deyimleri yazabilirsiniz.
Tipik bir örnek şöyle olabilir:
if (yas > 65) { yasli_kisiler++; printf("Yasli bir kisisiniz.\n"); } else if (yas > 40) { orta_yastaki_kisiler++; printf("Orta yastasiniz.\n"); } else if (yas > 17) { genc_kisiler++; printf("Gencsiniz.\n"); } else printf("Cocuksunuz.\n");
Bunun tek bir deyim olduğuna dikkat ediniz. Şimdi şunun üzerinde düşünün:
if (yas < 65) if (yas > 40) printf("Orta yastasiniz.\n"); else printf("Yaslisiniz.\n");
Eğer yas
65
’ten büyük veya eşitse
ne olacaktır? Diğer bir deyişle, else
hangi
if
’e aittir? Mesajlar ve içerlek yazma
şekli, bu deyimi yazan kişinin ilk if
’e ait
olduğunu düşündüğü izlenimini uyandırıyor, fakat bu doğru değil!
Kural şöyledir: Her else
en
yakın else
’i olmayan
if
’e aittir. Bundan dolayı, yukarıda
yapılmak istenen işi doğru şekilde yapan if
şudur:
if (yas >= 65) printf("Yaslisiniz.\n"); else if (yas > 40) printf("Orta yastasiniz.\n");
veya,
if (yas < 65) if (yas > 40) printf("Orta yastasiniz.\n"); else ; else printf("Yaslisiniz.\n");
veya,
if (yas < 65) { if (yas > 40) printf("Orta yastasiniz.\n"); } else printf("Yaslisiniz.\n");
else
’ten sonraki noktalı virgül bir
boş deyim oluşturur. Gördüğünüz gibi, sözdizimin bir deyim gerektirdiği,
fakat yapılacak bir şey olmadığı yerde boş deyim kullanılabilir. Başka bir
yol olarak, ikinci if
’i bir blok içine alırsak,
boş deyimli else
kullanmak zorunda kalmayız.
if (ifade_1) değişken = ifade_2; else değişken = ifade_3;
şeklindeki bir if
deyimi,
koşullu işleç
kullanılarak
değişken = ifade_1 ? ifade_2 : ifade_3;
şeklinde basitçe yazılabilir. Genelde, C dilindeki tek
üç-işlenenli (üçlü) işleç olan
işleci,
önce ifade_1’i hesaplar ve eğer ifade_1 doğru ise
ifade_2’nin değerini, aksi takdirde ifade_3’ün
değerini verir. Son iki ifadeden sadece biri hesaplanır. Sonucun tipi, önceki
bölümde anlatılan dönüşüm kurallarına göre ifade_2 ve ifade_3
birlikte dikkate alınarak belirlenir. ?:
işlecinin
sağdan sola doğru birleşme özelliği vardır ve önceliği
Kısım 2.2’de görülen tüm işleçlerden düşük,
atama işlecinden ise yüksektir.?:
işlecinin işleri nasıl kolaylaştırdığına bir
örnek:?:
printf(yas>65 ? "Yasli birisiniz.\n" : "Henuz yasli degilsiniz.\n");
Gördüğünüz gibi, hem ifade_2 hem de ifade_3
karakter dizileri ise, sonuç bir karakter dizisidir.
işleci değişmez ifadelerde de
kullanılabilir.?: