Data Vinci 14 : Null

Her programcının kâbusu, her programının mutlaka yüzleştiği yokluk hâlinin bit bazında vücut bulduğu “Karındeşen Null”. Bugünün konusu.

Null bir işaretçidir, bir çok programlama dilinde yer alan ayrılmış bir anahtar kelimedir. Bir obje referansının “default” değeridir.

“object reference not set to an instance of an object” hatasının baş şüphelisidir.

Bazı “Null”, “nil”, “none” şeklinde de yazılabilir. Ancak bir dile has ayrılmış kelime ne ise onun ile temsil edilir.

Matematiğin bazı dallarında Null değeri sıfırdır. Bunu yanı sıra farklı disiplinlerde farklı anlamlara sahiptir. Network için konuşursak “Null modem” diye bir terim var. Yine farklı bilim dallarında, null’a çeşitli anlamlar yüklenmiştir.


Kaçınma yolları

Modern dillerde Nullable types diye bir kavram vardır. Yani bir değer tipine null değerinin de atanabilmesi sağlanabilir. Böylelikle çalışma zamanında (run-time) ortaya çıkabilecek hataların önüne geçilmesi hedeflenebilir.

Bunun yanısıra null değerinin istenmeyen anlarda yazdığımız programları hüsrana uğratıp, varoşlarda “patlamak” olarak adlandırılan, sosyete de “crash” diye geçen durumları bizlere yaşatmaması adına çeşitli yöntemler mevcut.

Programlama açısından null değerleri bizlere sıkıntı yaratmaktadır. Beklenmeyen durumlarda çalışma anında programları kesmekte ve prestij kaybı yaşatmaktadır.

Null referans hatalarından kaçınmak için “defensive programming” yaklaşımları kulllanılır. Yani bir atama işlemi olan kod bloklarında atama işlemi öncesinde atanacak değerin “null” olup olmadığı kontrol edilir. Böylece eğer beklenmedik şekilde “null” değere sahip bir değişken var ise, programın hataya düşmesi engellenir (exception catching). Hataya düşmesi derken “run-time” esnasında oluşan hatanın programın çalışmasını engellememesi kastediliyor.

Sürekli olarak yazılarımda pattern, anti-pattern gibi kullanımlarım oluyor. İşte şimdi bunlara yenilerini ekleyeceğim an.

Guard Clause:  Defansif bir yöntemdir. Methodlar içerisinde kullanılan parametrelerin deklarasyonlarından önce “null” olup olmadığının kontrol edilmesi. İşini şansa bırakmayanlar için uygun. Göm her yere “eğer bana gelen parametre null değil ise” mantığını böylelikle “null check” yapmış ol.

Örnek kullanım:

Burada dikkat edilmesi gereken nokta, kontrol ettiğimiz değer bir sınıfın üyesi ise, sınıfın boş olması halinde “güm, pat,çat”. Tam “asın bayrakları diyecekken” hüzne boğar bizleri.

Örnek kullanım:

Yukarıda da görüleceği üzere test objesi null olmasından ötürü, instance içerisindeki metric değişkeni çağırıldığında “Thug Life” . Bu tarz kullanımlara dikkat etmek gerekiyor, erişmek istediğimiz objenin hangisi olduğuna design time’da doğru düzgün hâkim olamazsak, elin oğlu acımaz, basar “null reference exception“.

Aslında korkunç bir hata da değil. “Test was null.” demiş daha ne desin.

Debug (böceksizleştirme) esnasında kolaylıkla tespit edilebilir. Sunucu tarafından fırlatılıyorsa sakat, fakat client uygulamada bu tarz hataları yakalamak ve görebilmek kolaydır.

Exception Handling: Diğer yöntem ise yine defansif bir yöntemdir. Fakat try-catch (dene-yakala) blokları ile uygulama hata aldığı zaman, uygulama sonlandırmak yerine, kullanıcıya hata oluştuğuna dair mesaj göstermek, hatayı inceleyebilmek adına log (kayıt) tutmak, transactional(db’ye insert(ekleme) yapılırken mesela) bir işlem ise rollback(geri döndürme) yapabilmek  için gayet gerekli ve sıklıkla da kullanılması gereken bir yöntem. try-catch başına para ödemiyorsan tatava yapma yaz geç.

Nullable Types: Bölümün başında değindiğim kavram.  .net framework’ü içerisinde yer alan Nullable yapısı, dinamik özellikleri ile kullanıcı tarafından oluşturulan tiplere dahi uygulanabilmekte. (Generic) Bunun yanısıra değişken tip tanımının yanına konulan “?” karakteri ile bu değişkenin null değeri de kabul etmesi sağlanabilir.

 

TL;DR

Bu yazıda programlama ile uğraşanların sıkı fıkı olduğu “null” kavramının hakkını dilim döndüğünce teslim etmeye çalıştım. Null hatalarından nasıl kaçınabileceğimize dair birkaç yöntemden söz ettim.

Faydalı olması dileğiyle…

keep_calm

2 Replies to “Data Vinci 14 : Null”

Leave a Reply

Your email address will not be published. Required fields are marked *