Menu

Java if-else: Örneklerle Koşullu İfadeler

Java'da if, else if ve else ile nasıl karar verilir: boolean koşullar, dalları zincirleme, iç içe yapı, üçlü (ternary) operatör ve insanları yanıltan yaygın hatalar.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

if ile Karar Vermek

Programların verilere tepki vermesi gerekir: geçti ya da kaldı, stokta ya da tükendi, geçerli ya da değil. if ifadesi, Java'nın bir koşula göre hangi kodu çalıştıracağını seçme biçimidir.

Bir if, parantez içinde boolean bir koşul alır ve bu koşul yalnızca true olduğunda süslü parantezler içindeki bloğu çalıştırır:

score >= 60 koşulu true olduğundan mesaj yazdırılır. Kapatan süslü parantezden sonraki satır her zaman çalışır; o, if'in dışındadır. score değerini 40 yap, "passed" satırı tamamen atlanır.

C'nin aksine Java, boolean beklenen yere bir sayı koymana izin vermez. if (score) bir derleme hatasıdır; koşulun karşılaştırmalardan (>, >=, ==, !=) ya da boolean mantıktan (&&, ||, !) oluşan gerçek bir boolean ifade olması gerekir.

Bir else Eklemek

else sana "aksi takdirde" yolunu verir: yalnızca koşul false olduğunda çalışan kod:

İki bloktan tam olarak biri çalışır; asla ikisi birden, asla hiçbiri değil. else'in kendine ait bir koşulu yoktur; sadece if'in yakalamadığı her şeyi yakalar.

else if ile Zincirleme

İkiden fazla olası sonuç olduğunda koşulları else if ile zincirle. Java bunları yukarıdan aşağıya kontrol eder ve koşulu doğru olan ilk bloğu çalıştırıp gerisini atlar:

Sıra önemlidir. 84 önce >= 90 ile (yanlış), sonra >= 80 ile (doğru) kontrol edildiğinden B'de durur ve alt sınırları hiç test etmez. score >= 80 && score < 90 yazmana gerek olmamasının nedeni de budur; ikinci dala ulaşmak zaten score'un 90'dan küçük olduğunu garanti eder. En dar ya da en yüksek öncelikli koşulunu en başa koy.

Sondaki else senin her şeyi yakalayan durumundur. Burada onu atlamak bir derleme hatası olurdu, çünkü yazdırma anında grade atanmamış olabilir.

Değerleri Karşılaştırmak: == ile equals()

Java'daki en yaygın if hatası, string'leri == ile karşılaştırmaktır. İlkel türler (int, double, char, boolean) için == doğrudur. Nesneler için == "bu bellekteki aynı nesne mi?" diye sorarken .equals() "bunların içeriği aynı mı?" diye sorar ve neredeyse her zaman ikincisini istersin:

Yalnızca ikinci mesaj yazdırılır. new String("yes"), "yes" literalinden farklı bir nesnedir, bu yüzden == false'tur, ama metin aynı olduğundan .equals() true'dur. Genel kural: ilkel türler ==, nesneler .equals() kullanır.

Değişken null olabileceğinde bir NullPointerException'dan kaçınmak için güvenli bir numara: literali başa koy, if ("yes".equals(input)), çünkü bir literal asla null değildir.

Koşulları Birleştirmek ve İç İçe Kullanmak

Koşulları && (ve), || (veya) ve ! (değil) ile birleştirebilir ya da bir kontrol yalnızca öncekisi geçtikten sonra anlamlı olduğunda bir if'i başka birinin içine yerleştirebilirsin:

&& ve || kısa devre yapar: a && b içinde a yanlışsa Java b'yi hiç değerlendirmez. Bu, hatalara karşı korunmakta işe yarar: if (s != null && s.length() > 0) güvenlidir çünkü s null olduğunda uzunluk kontrolü atlanır. Yapabildiğinde derin iç içe geçme yerine && ile birleştirmeyi tercih et; düz kod, bir süslü parantez piramidinden daha net okunur.

Klasik bir tuzak: tek bir = atamadır, == karşılaştırmadır. if (x = 5) yazmak int için bir derleme hatasıdır (iyi), ancak bir boolean üzerinde if (flag = true) derlenir ve sessizce atama yapar; buna dikkat et.

Üçlü (Ternary) Operatör

Tek istediğin iki değer arasında seçim yapmaksa, üçlü operatör ?: kompakt bir tek satırlık çözümdür. condition ? a : b ifadesini "koşul doğruysa a değilse b" diye oku:

Üçlü operatör, atayabileceğin ya da doğrudan geçirebileceğin bir değer üretir. Onu basit seçim için sakla: herhangi bir dal birden çok ifadeye ya da gerçek mantığa ihtiyaç duyuyorsa, iç içe bir üçlü hızla bir bilmeceye dönüşürken tam bir if-else okunabilir kalır.

Bir Tuzak: İsteğe Bağlı Süslü Parantezler

Java, bir dalda tek bir ifade olduğunda süslü parantezleri atlamana izin verir, ancak bu ince bir hataya davetiye çıkarır. Girintileme yanıltıcıdır:

if (loggedIn)
    System.out.println("Welcome");
    System.out.println("Loading dashboard");   // NOT part of the if!

Yalnızca ilk satır if tarafından kontrol edilir; girintileme aksini düşündürse de ikinci satır her durumda çalışır. Tek satır için bile her zaman süslü parantez kullan, böylece bu hata türünün tamamı ortadan kalkar.

Sıradaki: switch

if-else if zincirleri, her dal farklı bir koşulu test ettiğinde mükemmeldir. Ama tek bir değeri birçok sabit olasılıkla karşılaştırdığında (bir gün adı, bir menü seçimi, bir enum) uzun bir else if merdiveni tekrarlayıcı hale gelir. switch ifadesi tam olarak bunun için tasarlanmıştır ve bir sonraki sayfa odur.

Sıkça Sorulan Sorular

Java'da if-else ifadesi nasıl yazılır?

if'ten sonra parantez içine bir boolean koşul, ardından süslü parantezler içine çalışacak kodu ve koşul yanlış olduğunda çalışacak isteğe bağlı bir else bloğunu yaz: if (score >= 60) { System.out.println("Pass"); } else { System.out.println("Fail"); }. Koşulun bir boolean değerine dönmesi gerekir; Java, C'nin yaptığı gibi bir int kabul etmez.

Java'da bir if ifadesinde == ile equals() arasındaki fark nedir?

== iki referansın aynı nesneye işaret edip etmediğini kontrol ederken .equals() içeriği karşılaştırır. int gibi ilkel türler için == kullan. Nesneler için, özellikle String için, .equals() kullan: if (name == "Sam") değil, if (name.equals("Sam")). String'lerde == kullanmak Java'daki en yaygın if hatasıdır.

Java'da üçlü (ternary) operatör nedir?

Üçlü operatör condition ? valueIfTrue : valueIfFalse, bir değer üreten kompakt bir if-else'tir. Örneğin String label = age >= 18 ? "adult" : "minor"; koşula göre iki değerden birini atar. Basit değer seçimi için kullan; her dalda çalışacak mantık olduğunda tam bir if-else'e başvur.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA