Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
NULL ve Predicate'ler: Üç Değerli Mantık, LIKE, IN, BETWEEN ve COALESCE
SQL'de karşılaştırmanın üç sonucu var: TRUE, FALSE ve UNKNOWN; bu yüzden = NULL hiçbir row bulmaz, NOT bir nullable column'da NULL row'ları da eler ve NOT IN listesindeki tek bir NULL sonucu boşaltır. COALESCE ile ISNULL'ın tip farkını, NULLIF ile sıfıra bölme korumasını, LIKE'ta escape ve baştaki %'nin index'e etkisini ve BETWEEN'in tarih aralığında son günü kaçırmasını gerçek çıktılarla gösteriyoruz.
Sentinel Value'lar: 0, -1, "1900-01-01" ve 9999-12-31'in Gizli Maliyeti
Sentinel value'lar (maaşta 0, bitişte 9999-12-31, tarihte 1900-01-01) aggregate'leri sessizce bozar: örnekte ortalama maaş 85.000 yerine 51.000 çıkıyor. Çözüm genelde nullable kolon, anlamı birden fazlaysa ayrı bir durum field'ı ve domain'de Special Case tipi; sentinel ancak tek bir üreticisi olduğunda (temporal table, persisted computed column) bilinçli bir standart olabilir.
C# Operatörler ve Expression'lar: Short-Circuit, ??, ?. ve Öncelik
C#'ta expression ve statement farkı, aritmetik ve bileşik atama, prefix/postfix artırma, karşılaştırma, mantıksal operatörler ve short-circuit, ?: operatörü, ??, ??= ve ?. ile null yönetimi ve 100 - discount ?? 0 gibi öncelik tuzakları.