Operator Precedence Hatası: Parantez Olmadan İfade Yazmanın Riski

Operator önceliği (precedence), bir ifadede hangi işlemin önce yapılacağını belirler. Parantez kullanmadan karmaşık bir ifade yazarsan, derleyici senin istediğin sırayla değil, kurallarına göre hesaplar. Bu da çoğu zaman yanlış sonuca yol açar.

Örneğin matematikçi olarak bildiğin çarpma, toplama, bölme gibi işlemlerin sırası vardır. Programlamada da öyle. Ama yazarken unutursan, kod sessizce hata üretir.

Sorun Nedir?

C/C++'da çarpma () bölme (/) toplama (+) çıkarmadan (-) daha yüksek önceliğe sahiptir. Bitwise işlemler ve karşılaştırma operatörleri de kendi aralarında sıralanmıştır. Parantez koymadan karmaşık bir ifade yazarsan, bu kurallar seni beklemez.

Pratik Örnek

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Bir ürünün indirimli fiyatını hesapla. Orijinal fiyat 100, indirim yüzde 20, vergi yüzde 8. Doğru formül: (100 - 20% indirim) (1 + %8 vergi) olmalı.

1#include <stdio.h>
2
3int main() {
4double fiyat = 100;
5double indirim_oran = 0.20;
6double vergi_oran = 0.08;
7
8// YANLIŞ: parantez olmadan
9double yanlis = fiyat - indirim_oran * fiyat + vergi_oran * fiyat;
10printf("Yanlis sonuc: %.2f\n", yanlis);
11
12// DOĞRU: parantez ile
13double dogru = (fiyat - indirim_oran * fiyat) * (1 + vergi_oran);
14printf("Dogru sonuc: %.2f\n", dogru);
15
16return 0;
17}

Çıktı:

1Yanlis sonuc: 96.00
2Dogru sonuc: 86.40

Yanlış versiyonda önce çarpma yapılır, sonra toplama-çıkarma. Doğru versiyonda parantez sayesinde önce indirim uygulanır, sonra vergi eklenir.

Çözüm

Karmaşık ifadelerde her zaman parantez koy. Koda bakan başkası (ya da gelecekteki sen) kafası karışmasın. Operatör önceliğini ezberlemek yerine, parantez ile niyetini açık yaz. Kod okunabilirliği artar, hata azalır.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz