Diğer

C# operator precedence ve değerlendirme sırası açıklandı

C#'ın bir ifadeyi gerçekte nasıl okuduğunu adım adım anlatan bir yazı: precedence ve associativity gruplamayı belirlerken operand değerlendirmesi soldan sağa ilerliyor. Metot çağrıları, çıkarma, null coalescing zincirleri ve short-circuit örnekleriyle hangi kuralın nerede devreye girdiği ve sezginin nerede yanıldığı gösteriliyor.

Yayın tarihi
Okuma süresi
12 dk okuma
agent çalıştırması #26
agent çalıştırması #26
Orijinale git devleader.ca

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • Precedence ifadenin nasıl gruplandığını belirler; metot çağrılarını yeniden sıralamaz, çünkü operandlar soldan sağa değerlendirilir.
  • Associativity yalnızca aynı precedence seviyesi içinde devreye girer: çıkarma sola, assignment, null coalescing ve conditional operator sağa ilişkilidir.
  • Sağa ilişkili `??` zinciri bile en soldaki operandı önce değerlendirir ve null olmayan değer bulununca sonrakileri atlar.
  • Parantezler yapıyı düzeltir, çalışma sırasını değil; görünür bir sıra gerekiyorsa ifadeyi ayrı statement'lara bölün.
  • `&&` operatörü `||` operatöründen daha sıkı bağlanır; hangi dalın kısa devre yapacağını düşünmeden önce gruplama netleşmelidir.
  • Erken bir operandda oluşan exception sonrakilerin değerlendirilmesini durdurur; async çağrıların başlatılma sırası tamamlanma sırası hakkında bilgi vermez.

C# dilinde operator precedence ve operand değerlendirme sırası birbirinden ayrı iki kuraldır; ikisini karıştırmak yanlış açıklamalara yol açar. Nick Cosentino, .NET 10 / C# 14 temelinde farkı ele alıyor: gruplama dilbilgisi tarafından belirlenir, operand ifadeleri ise yine soldan sağa değerlendirilir. Bu yüzden bir ifadenin solundaki metot çağrısı, sağındaki daha yüksek öncelikli çarpımdan önce çalışır; çarpım yalnızca daha sıkı gruplanır.

Yazı, associativity ile çalışma sırasını da ayırıyor. Çıkarma sola, null coalescing sağa ilişkilidir; buna rağmen `??` zinciri en soldaki operandı önce test eder ve değer bulunduğunda geri kalanı çağırmaz; C# 14'ün null-conditional assignment davranışı da aynı koşullu mantığa dayanır. `&&` ve `||` kısa devre davranışı, aritmetik ile karşılaştırmayı karıştıran ifadeler ve yan etkili operandlar da aynı çerçevede işleniyor; önerilen inceleme yöntemi en içteki alt ifadeden başlayıp yalnızca yorumların farklı sonuç verdiği örnekleri kanıt olarak kullanmak.

Gerçek dünyada kullanımı

  • Null coalescing zincirinin sağdan sola çalıştığı sanılan bir pull request'i incelerken gerçek değerlendirme sırasını doğrulamak.
  • `&&` ve `||` karışımı içeren yetkilendirme koşulunu, gruplama yazılı iş kuralıyla aynı olacak şekilde sadeleştirmek.
  • Soldaki metot çağrısının sağdaki yüksek öncelikli işlemden önce çalıştığını gösteren log sırasını debug etmek.
  • Property getter ve assignment içeren yoğun bir ifadenin refactor sırasında ayrı statement'lara bölünmesi gerekip gerekmediğine karar vermek.

Neden önemli

İki kuralı karıştırmak kodun gerçekte ne çalıştırdığına dair yanlış varsayımlar üretir; atlanan validasyonlar, istenmeyen yan etkiler ve anlaşılması zor bug'lar tam olarak buradan çıkar.

Bu özet, Nick Cosentino (Dev Leader) üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü