İç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.)

saQut’ta ?: üçlü operatörü yoktur; ? yalnızca nullable tip işaretidir (int?). İki değer arasında seçim yapmak için değişkeni tanımlayıp her dalda atayın:

int x = 5;
string label;
if (x > 0) { label = "positive"; } else { label = "non-positive"; }
  • 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