Hiçbir yazılım sorunu sıfır referans kadar yaygın ve aynı zamanda pahalı değildir. Bunlar sistem çökmelerinin, tanımlanmamış durumların ve güvenlik açıklarının en yaygın nedenleri arasındadır. Her geliştirici “NullPointerException”, “Nesne referansı bir nesnenin örneğine ayarlanmadı” veya “Segmentasyon hatası” gibi bir hata mesajı görmüştür.
Duyurudan sonra devamını okuyun
Golo Roden, native web GmbH'nin kurucusu ve CTO'sudur. Olay odaklı ve hizmet tabanlı dağıtılmış mimarilere odaklanarak web ve bulut uygulamaları ile API'lerin tasarımı ve geliştirilmesiyle ilgilenmektedir. Yol gösterici ilkesi, yazılım geliştirmenin kendi içinde bir amaç olmadığı, her zaman temeldeki profesyonelliği takip etmesi gerektiğidir. “Yazılım Hatalarından Öğrenmek” serisinin bölümleri:
Modeli 7: Boş Referanslar ve Boş Değerler: “Trilyon Dolarlık Hata”
Modern programlama dillerinin babalarından biri olan Tony Hoare, daha sonra 1960'larda sıfır referansın getirilmesini trilyon dolarlık hatası olarak tanımladı. 1965'te ALGOL W programlama dilini geliştirdi ve onu daha esnek hale getirmek için bir nesneye işaret eden veya “hiçbir şey” anlamına gelmeyen referanslara izin verdi. O zamanlar bu pratik görünüyordu: Daha karmaşık tür yapılarını kaydediyordunuz ve bir değerin “orada” olup olmadığını kolayca kontrol edebiliyordunuz.
Hoare'nin o zamanlar bilmediği şey: Görünüşte zararsız olan bu karar, takip eden yıllarda sayısız hataya, güvenlik sorunlarına ve ekonomik hasara neden olacaktı. Çünkü boş referanslar pratikte iki tipik modele yol açar:
- Hatalar geç, genellikle çalışma zamanında, bazen de nadir durumlarda ortaya çıkar.
- Sıfır değeri genellikle fiili kullanımdan çok uzakta meydana geldiğinden, sebebin izini sürmek genellikle zordur.
Günlük yaşamda sıfır hata, ara sıra meydana gelen çökmeler veya hatalı işlevler olarak kendini gösterir. Kurumsal sistemlerde bu, bireysel işlemlerin başarısız olması veya verilerin tutarsız hale gelmesi anlamına gelebilir. Kritik sistemlerde boş referansların özellikle ciddi sonuçları olabilir:
- Güvenlik Açığı: Eksik boş kontroller bazen saldırganların yararlanabileceği bellek alanlarına erişime yol açar.
- İş kesintileri: Bir alanın beklenmedik şekilde boş olması nedeniyle web sunucuları veya mikro hizmetler çöküyor.
- Basamaklı efektler: Dağıtılmış sistemlerde, tek bir boş hata, mesaj kuyruklarının veya API çağrılarının askıda kalması gibi durumlarda domino etkisini tetikleyebilir.
Duyurudan sonra devamını okuyun
Sessiz null hataları özellikle tehlikelidir: kodunuz bir nesneye erişmeye çalıştığında… null ve dil bu erişimi yok sayar veya varsayılan bir değer sağlar. Bu, uzun süre fark edilmeden kalabilecek veri bozulmasına yol açabilir.
Modern yazılım geliştirme bu hatadan ders almıştır. Her yere sıfır çek yazmak yerine bugün aşağıdakiler geçerlidir:
- Varsayılan olarak sıfır olmayan: Kotlin, Swift veya TypeScript gibi birçok modern dil bunu kullanıyor
strictNullChecksvarsayılan değer “null değil”dir. Atlanabilecek bir değerin açıkça isteğe bağlı olarak bildirilmesi gerekir. - Türler Seçenek veya Belki: Yerine
nullörneğin verme işlevlerini kullanmak içinOption<T>VEYAMaybe<T>Geriye. Derleyici daha sonra “değer yok” durumunun açık bir şekilde ele alınmasını zorlar. - Yapıcıda değişmezleri uygulama: Nesneler hiçbir zaman yarı başlatılmış durumda olmamalıdır. Zorunlu alanlar doğrudan oluşturma sırasında ayarlanır ve tüm süre boyunca geçerli kalır.
- “Mevcut değil” etki alanının açık temsili: Basit yerine
nullBunu kullanmak için, etki alanında bir değerin yokluğunun eşlenmesi gerekir; gibiNotApplicable,UnknownVEYAEmpty. - Statik analiz ve linter kullanın: SonarQube, ESLint veya FindBugs gibi araçlar, oluşturulmadan önce pek çok sıfır riski tespit eder.
Bununla birlikte, boş referanslar yalnızca teknik bir sorun değil, aynı zamanda zihinsel bir kalıptır: genellikle bir şeyi geçici olarak düzeltmek için hızlı bir çözümdürler. Ancak her sıfır, potansiyel olarak faturasını ancak aylar sonra ödeyebilecek, dalgalanan bir sistem durumudur. Bu zihniyeti içselleştiren ekipler sıfır hatayı önemli ölçüde azaltır.
Tony Hoare'nin milyar dolarlık hatası bize tasarım kararlarının uzun vadeli maliyetleri olduğunu hatırlatıyor. Bugün yeni yazılım geliştiren herkes, mümkün olan her yerde sürekli olarak sıfır değerlerden kaçınmalıdır. Açık türler, derleyici kontrolleri ve net etki alanı modelleri, yalnızca ara sıra meydana gelen çökmeleri değil, aynı zamanda maliyetli ve teşhis edilmesi zor operasyonel hataları da önler.
(DSÖ)

Bir yanıt yazın