İçeriğe geç

if / else

Koşullu ifadeler, programınızın karar vermesini sağlar. Bir koşulun true veya false olmasına bağlı olarak farklı kod çalışır.

int x = 5;
if (x > 0) {
print("positive");
}

Parantez içindeki koşul truthy (sıfırdan farklı herhangi bir değer) ise blok çalışır. Falsy (sıfır) ise blok atlanır.

saQut, C tarzı truthiness kullanır: 0 false, diğer her şey true kabul edilir.

int x = -3;
if (x > 0) {
print("positive");
} else {
print("not positive");
}

Birden çok koşulu zincirleyin:

int score = 75;
if (score >= 90) {
print("A");
} else if (score >= 70) {
print("B");
} else if (score >= 50) {
print("C");
} else {
print("F");
}

if ifadelerini başka if ifadelerinin içine yerleştirebilirsiniz:

int x = 10;
int y = 5;
if (x > 0) {
if (y > 0) {
print("both positive");
}
}

Blok tek bir ifade içeriyorsa süslü parantezleri yazmayabilirsiniz:

if (x > 0)
print("positive");
else
print("not positive");

Dikkatli olun; süslü parantezleri kaldırmak kafa karıştırıcı koda yol açabilir. Emin değilseniz { } kullanın.

int divide(int a, int b) {
if (b == 0) {
return 0; // gard, erken çık
}
return a / b;
}
int? value = getMaybeValue();
if (value != null) {
// Bu blok içinde 'value' artık null değildir
print(value);
}

Koşul bir değer üretmelidir. Sıfırdan farklı her değer truthy’dir:

if (1) { print("çalışır"); } // sıfırdan farklı → truthy
if (0) { print("çalışmaz"); } // sıfır → falsy
if (42) { print("çalışır"); } // sıfırdan farklı → truthy
if (-1) { print("çalışır"); } // sıfırdan farklı → truthy

Karşılaştırma operatörleri (==, !=, <, >, <=, >=) veya mantıksal operatörler (&&, ||, !) içeren koşullar her zaman true (1) veya false (0) döndürür.

Koşulları && (ve), || (veya) ve ! (değil) ile birleştirin:

int age = 25;
bool hasTicket = true;
if (age >= 18 && hasTicket) {
print("welcome");
}
if (age < 13 || age > 65) {
print("discounted");
}

&& ve || kısa devre yapar: cevap belli olur olmaz dururlar. && ile sol taraf false ise sağ taraf hiç değerlendirilmez; || ile sol taraf true ise sağ taraf atlanır. Bu sayede bir kontrolü, onu güvenli kılan test ile koruyabilirsiniz:

// 'b != 0' kontrolü bölmeyi korur, soldan sağa değerlendirilir
if (b != 0 && a / b > 2) {
print("ratio is large");
}

Tam öncelik kuralları için operatörler sayfasına bakın.

Bir nullable değer (int?, string?, …) doğrudan kullanılamaz: derleyici null olabileceği için reddeder:

int? x = getValue();
print(x + 1); // HATA (E003), 'x' null olabilir

Bir if (x != null) kontrolü türü daraltır: blok içinde x’in tipi int? değil int’tir, bu yüzden onu düz bir int olarak kullanabilirsiniz:

int? x = getValue();
if (x != null) {
print(x + 1); // TAMAM, bu blok içinde null olmayan int'e daraltıldı
}

Daraltma && üzerinden de çalışır: solda null kontrolünü yaptıktan sonra sağ taraf değeri zaten null değilmiş gibi görür:

int? x = getValue();
if (x != null && x > 5) { // 'x > 5'e izin verilir: x burada null değil
print("big");
}

Nullable bir değeri kullanmanın tek yolu budur: x! zorla-unwrap yoktur, ?. operatörü yoktur. Kontrol kodda görünürdür ve güvenlik sıfır çalışma zamanı maliyetiyle derleme zamanında kanıtlanır. (Bkz. veri türlerinde null güvenliği.)

“İki değerden birini seç” gibi basit durumlarda, ternary operatörü ?:, tam bir if yerine kompakt bir ifadedir:

int x = 5;
// if / else
string label;
if (x > 0) { label = "positive"; } else { label = "non-positive"; }
// aynısı ternary ile
string label2 = x > 0 ? "positive" : "non-positive";

İfade çalıştırmak için if kullanın; yalnızca bir değer seçmek için ?: kullanın.

  • Bir değeri çok sayıda seçenekle karşılaştırmak için switch
  • Kodu tekrarlamak için for döngüleri
  • Truthiness ve tür dönüşümlerini veri türleri sayfasından öğrenin