Evet
Her zaman parantez kullanmalısınız ... öncelik sırasını kontrol etmezsiniz ... derleyicinin geliştiricisi yapar. İşte parantez kullanmama konusunda başıma gelen bir hikaye. Bu iki hafta boyunca yüzlerce kişiyi etkiledi.
Gerçek Dünya Nedeni
Ana çerçeve uygulamasından miras kaldım. Bir gün, berrak mavi olanın dışında çalışmayı bıraktı. İşte bu ... sadece durdu.
Benim işim mümkün olduğunca çabuk çalışmasını sağlamaktı. Kaynak kodu iki yıl boyunca değiştirilmedi, ancak aniden durdu. Kodu derlemeye çalıştım ve XX. Satırda kırdı. XX no'lu çizgiye baktım ve XX no'lu çizginin kırılmasının ne olacağını söyleyemedim. Bu uygulama için ayrıntılı özellikleri istedim ve hiçbiri yoktu. XX hattı suçlu değildi.
Kodu yazdırdım ve en baştan aşağı incelemeye başladım. Neler olduğuna dair bir akış şeması oluşturmaya başladım. Kod o kadar karmaşıktı ki, neredeyse hiç anlamamıştım. Akış şeması yapmaya çalışmaktan vazgeçtim. Bu değişimin sürecin geri kalanını nasıl etkileyeceğini bilmeden değişiklikler yapmaktan korktum, özellikle uygulamanın ne yaptığı ya da bağımlılık zincirinde nerede olduğu konusunda hiçbir ayrıntıya sahip olmadığımdan.
Bu yüzden, kaynak kodunun başından başlamaya ve kodu daha okunaklı hale getirmek için boşluk ve el freni eklemeye karar verdim. Bazı durumlarda, vardı, fark ettiyseniz kombine koşullar AND
ve OR
ve veri olmanın ne arasına açıkça ayırt değildi AND
ed ve hangi verilerin ediliyordu OR
ed. Ben de onları daha okunaklı hale getirmek için parantez AND
ve OR
koşulları koymaya başladım .
Yavaş yavaş temizlerken aşağıya doğru ilerlediğimde periyodik olarak işimi kurtaracağım. Bir noktada kodu derlemeye çalıştım ve garip bir şey oldu. Hata atlandı orijinal kod satırını geçti ve şimdi daha da aşağıdaydı. Böylece ben AND
ve OR
koşulları parens ile ayrıştırmaya devam ettim . Temizlemeyi bitirdiğimde işe yaradı. Şekil git.
Daha sonra operasyon mağazasını ziyaret etmeye karar verdim ve ana kareye yakın zamanda yeni bir bileşen takıp takmadıklarını sordum. Evet dediler, yakın zamanda derleyiciyi yükselttik. Hmmmm.
Eski derleyicinin ifadesini soldan sağa ne olursa olsun değerlendirdiği ortaya çıktı. Derleyici yeni versiyonu da belirsiz kombinasyonu anlamına sağ ama belirsiz koda soldan ifadeleri değerlendirilerek AND
ve OR
çözülemedi.
Bundan öğrendiğim ders ... HER ZAMAN, HER ZAMAN, HER ZAMAN, birbirleriyle bağlantılı olarak kullanıldığında her zaman ayrı AND
koşulları ve OR
koşulları kullanmak için parenler kullanırlar .
Basitleştirilmiş Örnek
IF Product = 191 OR Product = 193 AND Model = "ABC" OR Product = 201 OR Product = 202 AND Model = "DEF" ...
(bunlardan bir kaçı ile kodlanmış kod)
Bu, karşılaştığımın basitleştirilmiş bir versiyonudur. Bileşik boole mantığı ifadeleriyle başka koşullar da vardı.
Şununla kovaladığımı hatırlıyorum:
IF ((Product = 191 OR Product = 193) AND Model = "ABC") OR ((Product = 201 OR Product = 202) AND Model = "DEF") ...
Bunu yazamadım çünkü hiç bir şey yoktu. Orijinal yazar çoktan gitmişti. Yoğun baskıyı hatırlıyorum. Bütün bir kargo gemisi limanda mahsur kaldı ve bu küçük program çalışmadığı için yüklenemedi. Uyarı yok. Kaynak kodunda değişiklik yok. Ağ Operasyonlarına sormak bana sadece paren eklemenin hataları değiştirdiğini fark ettikten sonra bir şeyleri değiştirip değiştirmediklerini sormaya başladı.