if Deyimi
if deyimi, bir önceki sayfada sözünü ettiğimiz "ifadeyi denetleyerek, ifadenin değerine göre uygun yollardan bir tanesiyle dallanma işlemini gerçekleştiren" bir kontrol deyimidir. Bu sayede şartlı dallanma (conditional branching) adı verilen işlem gerçekleştirilir. Şartlı dallanma, bir programlama dili için en temel kontrol yapısıdır.
Şartlı dallanma işlemiyle bir program, gidişatını daha önceden verdiğiniz yollardan biriyle devam ettirmeye karar verebilir hale gelir. Bir şarta göre bir komut dizisini çalıştırır veya esgeçer.
Java dilinde şartlı dallanma if ve else anahtar sözcükleriyle gerçekleştirilir. if deyiminin basit gösterimi şöyledir:
if (şart) komut 1
komut 2
Burada şartın değeri doğru (true) olarak sağlanıyorsa ancak komut 1 çalıştırılır. Daha sonra program normal bir akışla komut 2’yi çalıştırmaya geçer. Şartın değeri yanlış (false) ise, bu durumda program doğrudan komut 2’ye geçer ve onunla devam eder. Kısacası şartın değeri yanlış ise komut 1 hiçbir zaman çalışmayacaktır.
Aşağıda if yapısını açıklayan bir akış diyagramı verilmiştir. Hemen ardından Java'da yazılan bir if örneği verilmiştir.
if deyimi için akış diyagramı (flow chart)
if (fiyat==1) { //fiyat 1 ise çalıştırılacak komutlar }
Bu noktada, Java dilinde doğru ve yanlışın ne anlama geldiğini belirtelim: Şartın doğru olması, o ifadenin matematiksel olarak 1 yani true (doğru) olan bir değer üretmesi demektir. Yanlış olması ise, matematiksel olarak değerin 0 yani false (yanlış) olan bir değer üretmesi anlamına gelir. Programlama dillerinde sadece bu iki değerden birini alabilen değişken türleri boolean olarak anılır.
Şartlı dallanmanın yarısını bitirdik, şimdi diğer yarısına bakalım.
Sizin de dikkat ettiğiniz gibi yukarıdaki örnek sadece şart sağlanırsa olacaklara ilişkin bir dallanmaya gidiyor. Şimdi şart sağlanmazsa durumuna bakalım. Bunun için yeni bir deyim olarak else deyimi ile tanışacağız. "else" deyimi sadece if ile birlikte kullanılan bir şartlı dallanma deyimidir. İkisinin beraber kullanımı şöyle bir yapıda gerçekleşir:
if (şart) komut 1
else komut 2
komut 3
Bu durumda, şart doğru ise komut 1 çalıştırılır ve sonra komut 3’e geçilir. Şartın değeri yanlış ise, bu durumda da komut 1 atlanarak doğrudan else’i takip eden komut 2’ye geçilir. Bu çalıştırıldıktan sonra program yine komut 3 ile çalışmaya devam eder. Bu yapıya ilişkin aşağıdaki akış diyagramına göz atalım ve sonra da Java programlama diliyle yazılan if-else örneğine göz atalım:
if else deyimi için akış diyagramı(flow chart)
if-else'li bir Java kodu da şöyle olur:
public class SartliDallanmaOrnek1 { public static void main(String[] args) { int parola=2013; if (parola==2013) { System.out.println("Parolalar eşleşiyor."); } } }
Bu örnekte programın içinde tanımlanmış integer tipli 'parola' değişkeninin değerinin 2013 olup olmadığı şartını denetliyoruz ve eğer şart doğru olarak ifade edilebiliyorsa ekrana 'Parolalar eşleşiyor.' yazdırıyoruz.
Evet, yukarıdaki sahiden basit bir örnek. Genelde parola değişkeni gibi programcı tarafından programın içinde oluşturulan ve program bittiğinde yok edilen değişkenler ile böyle denetimler yapıp, programı şartlı dallanmaya uğratmayız. Programcının dışında olanlarla ilgileniriz. Kullanıcıyla etkileşime geçerek veya bilgisayardaki başka değişenlere (saat, ağ bağlantısının müsaitliği ve daha bir sürü değişebilecek durum) göre dallanma yaparız. Aşağıdaki örnekte bunu deneyelim. Kullanıcıya İstanbul'un plaka kodunu soralım ve verdiği yanıta göre ona tekrar yanıt dönelim:
NOT: Aşağıdaki örnekte kullanıcıdan veri almak için Scanner adında bir sınıf kullanılmıştır. Scanner sınıfı java.util paketi içerisinde bulunan bir sınıftır. Bazı basit tipteki ifadeleri klavyeden okumaya yarayan sade bir yazı tarayıcı sınıfıdır. Scanner sınıfı hakkında bazı önemli noktalar şöyledir:
- Bir Scanner girdiyi bazı kalıplara göre ayırıştırır. Bu ayrışım genellikle girdinin içerdiği boşluklara göre olur.
- Bir tarama işlemi kullanıcıdan girdi gelmesi için bekleme yapabilir.
Bu kod parçasında Scanner, konsolda kullanıcının girdiği metni alır ve bir değişkene atar.
import java.io.IOException; import java.util.Scanner; public class SartliDallanmaOrnek2 { public static void main(String[] args) throws IOException { Scanner giris=new Scanner(System.in); //String kullanicininYazdigi; int istanbulPlakaKodu=34; int girilenPlakaKodu; //soruyu ekrana basalım System.out.println("Istanbul'un plaka kodu nedir?"); //klavyeyle girilen değeri integer olarak alalım girilenPlakaKodu=giris.nextInt(); if(girilenPlakaKodu==istanbulPlakaKodu) { System.out.println("Evet! Dogru yanit."); } else { System.out.println("Hayir, Istanbul'un plaka kodu 34'tur."); } } }
Bu program ile basitçe kullanıcıdan İstanbul'un plaka kodunu girmesini istiyoruz ve girdiği değeri önce kullanicininYazdigi değişkeninde tutuyoruz ve sonra onu girilenPlakaKodu değişkeninde tutulacak bir hale çeviriyoruz. Bu sayede tamsayı tipindeki istanbulPlakaKodu değişkeniyle karşılaştırabiliyoruz. Karşılaştırma sırasında == operatörü kullanıyoruz. Bu "eşit mi?" anlamına geliyor. Eğer girilenPlakaKodu ile istanbulPlakaKodu değişkeni birbirine eşitse, bu şart bize true (doğru) döndürüyor ve if bloku çalışıyor. Eşit değilse else bloku devreye giriyor ve kullanıcıya olumsuz mesaj veriliyor.