İpucu - Neden Fonksiyonlarda Null Döndürmemeliyiz?

Programlama dillerinde, fonksiyonlar (metodlar) genellikle belirli bir işlemi gerçekleştirir ve sonuç olarak bir değer döndürür.
Bazen bir fonksiyonun işlemi başarısız olduğunda null(başka dillerde nil ve undefined olarak da kullanılır) gibi bir değer döndürmesini tercih ediliyor. Bu yaklaşım, kodunuzu anlamak, hata ayıklamak ve bakım yapmak açısından karmaşıklığa neden olabilir. Ayrıca buradan dönen response değerini kullanan client/front end geliştiriciler için de ekstra bir yük oluşturmuş oluruz. Bu yüzden eğer fonksiyonunuz farklı bir uygulama tarafından çağırılıyorsa veya başka client'lar tarafından çağırılıyorsa mümkün oldukça null değer döndürmekten kaçınmalıyız. Bu şekilde kodumuzun da daha anlaşılır ve güvenli olmasını sağlarız.

 


Null Değerlerin Sorunları

  1. Null Reference Exception (Hata): Null değerler, null referansı hatasına yol açabilir. Bu, uygulamanızın çökmesine ve hataların izlenmesinin zorlaşmasına neden olabilir.

  2. Kod Karmaşıklığı: Null değerler, kodunuzu karmaşık hale getirebilir. Her seferinde null değerler için kontrol yapmak, kod okunurluluğunu azaltır.

  3. Hata Ayıklama: Null değerler, hata ayıklamayı zorlaştırabilir. Nerede ve nasıl bir fonksiyonun null döndürdüğünü bulmak karmaşık olabilir.

Çözüm?
Oluşan hataya uygun olan exception türünü fırlatabiliriz. (DivideByZeroException gibi.)

Uygun olan HTTP status code değerini dönmeliyiz. (HTTP 404 - istek yapılan kayıt bulunamadığını bu şekilde belirtebiliriz)

Array veya List dönüyorsak, boş array/list dönebiliriz.

 

Örnek

Mesela aşağıdaki gibi verilen kullanıcı adına ait db'deki ID değerini döndüren bir fonksiyonumuz olsun;

public User GetIdByName(string name)
{
    int id = Database.Find(name);
    if (id == 0)
    {
        return null;
    }
    return new Employee(id);
}

Bunu aşağıdaki şekilde yazmamız bir çok açıdan kolaylık sağlayacak ve daha doğru bir yaklaşım olacaktır;


public User GetIdByName(string name)
{
    int id = Database.Find(name);
    if (id == 0)
    {
        throw new HttpResponseException(HttpStatusCode.NotFound)
    }
    return new Employee(id);
}

 

Ama tabiki bazı istisnalar olacaktır. Bazı durumlarda null kullanmanız da gerekebilir. Bu tarz senaryoları da mümkün olduğunca private class'lar içerisinde çözmeli, public çağrılmaya bir sonuca bağlamadan açmamalıyız. 

 

Ek kaynak;
Why null is bad?
Null Object Pattern
Never Return Null Again

 

 

Add comment