13. satırda aşağıdaki formatla ifade edilen "ternary operator" denilen operatör kullanılıyor. "Doğru veya yanlış bir ifade" ? "Doğruysa dönmesi gereken ifade" : "Yanlışsa dönmesi gereken ifade"
Burada iç içe 2 ternary operator kullanıldığı için okuması gerçekten zor olabilir. Bu yüzden geleneksel ıf else ifadeleri ile bu satırı aşağıdaki gibi ifade edebiliriz.
Burada sonuç = basamak < oncekibasamak kısmı hala kafanı karıştırıyor olabilir. Kısaca açıklayayım soru işareti kalmasın.
Sonuç değişkeni bir integer. basamak < oncekiBasamak
Sorgusu true veya false gibi bir değer döndürür. C dilinde bunlar compiler düzeyinde ınteger'lar ile ifade edilir. Yani true 1, false 0 olacaktır. Bu sebeple basamak değişkeninin, onceki basamak değişkeninden küçük olması durumunda sonuç değişkeni 1 değerini alacaktır. Bu değer de doğru olarak görüldüğünden if bloğunun içine girilecektir.
Çünkü benim yazdığım kodun içindeki return 0 ve return 1'ler int main() fonksiyonundan çıkıyor. Ben orada sadece ternary işleminin ne döndürdüğünü ifade etmek istemiştim.
Bahsettiğimiz sorguda aslında yapılan tek işlem şu:
C:
if (result == 0 && digit < preDigit) {
result = digit<predigit // If'in içinde zaten digit < preDigit'in dogrulugunu kontrol ettigimizden her zaman true dönecektir, yani eğer if'in koşulu doğruysa result her zaman 1(true)'ya eşitlenecektir.
}