Altbilgi içeriğine atla
Iron Academy Logo
C# ve .NET'te Yenilikler

C# 10'da ve .NET 6'da 10 Dakika veya Daha Az Sürede Null Parametre Kontrolleri

[[academy-video-youtube({"vid": "230zlnKkl3A", "start_time": "0", "title": "C# 10 ve .NET 6'da Null Parametre Kontrolleri: 10 Dakikadan Az Sürede", "creator": "Tim Corey", "length": "4m 49s"})]]

C# ile çalışırken, geliştiricilerin metotlara geçirilen null argümanlarla karşılaşmaları yaygındır. Bu, uygun bir şekilde ele alınmazsa beklenmedik davranışlara, çalışma zamanı hatalarına ve hatta işlenmemiş istisnalara yol açabilir. Tim Corey, "Null Parameter Checks in C# 10 and .NET 6 in 10 Minutes or Less" adlı videosunda, C# 10'un ArgumentNullException sınıfını kullanarak null değerlerin yönetimini nasıl basitleştirdiğini açıklıyor.

Bu makalede, Tim'in videoda açıkladığı şekilde ilerleyerek, null kontrollerinin nasıl çalıştığını ve modern C#'ta nasıl geliştirildiğini anlayacağız.

Sahneyi Hazırlama – Null Parametreleri Kontrol Etme

Tim, C# dilinde null parametre kontrollerinin nasıl ele alındığını göstermek için basit bir .NET 6 konsol uygulaması oluşturarak başlar. Şablon kodlarını temizler ve bir nullable string değişkeni tanımlar:

string? info = null;
string? info = null;

Bu null obje, bir metod çağrısının doğru şekilde başlatılmamış bir argüman alabileceği bir durumu temsil eder. Tim daha sonra basit bir yöntem tanımlar:

void SayHi(string message)
{
    Console.WriteLine($"Merhaba {message}");
}
void SayHi(string message)
{
    Console.WriteLine($"Merhaba {message}");
}

O, info değişkenini metoda geçirir:

SayHi(info);
SayHi(info);

Program çalıştırıldığında, çıktı sadece şunu gösterir:

Merhaba

İstisna oluşmaz çünkü string birleştirme, null değeri kabul eder ve onu boş bir string gibi değerlendirir. Ancak, Tim'in belirttiği gibi, çoğu gerçek dünya yönteminde, bu, null bir referansın aşağı yönde sorunlara veya çağrı yığını içinde daha sonra bir NullReferenceException'a yol açtığı hata eğilimli durumlara neden olabilir.

Güçlü bir kod oluşturmak için, geliştiriciler argümanları doğrulamalı ve herhangi bir yöntemin geçerli, boş olmayan bir girdi beklediğinden emin olmalıdır.

C# 10 Öncesi Geleneksel Null Kontrolü

Tim, C# 10'dan önce iyi uygulamanın, parametreleri manuel olarak kontrol etmek ve gerektiğinde bir ArgumentNullException fırlatmak olduğunu açıklar. SayHi metodunun içine, o şunları ekler:

if (message is null)
    throw new ArgumentNullException(nameof(message));
if (message is null)
    throw new ArgumentNullException(nameof(message));

Bu kontrol, eğer nul bir argüman geçilirse programın hemen ArgumentNullException sınıfının yeni bir örneğini atmasını sağlar.

Tim kodu çalıştırdığında, hata mesajı açıkça gösteriyor:

System.ArgumentNullException: Value cannot be null. (Parameter 'message')
System.ArgumentNullException: Value cannot be null. (Parameter 'message')

Bu işlenmemiş istisna, metodun geçersiz bir argüman aldığını gösterir. Bu durumda, 'message' olan parametre adı otomatik olarak çıktıda görüntülenir, geliştiricinin soruna neden olan argümanı tam olarak belirlemesine yardımcı olur.

Tim, bu manuel kontrolün .NET Framework ve önceki .NET Core sürümlerinde mükemmel şekilde çalıştığını belirtmektedir. Ancak, birden fazla parametreyle çalışırken fazla ayrıntılı ve tekrar edici olabilir. Doğrulama gerektiren her ek parametre, yöntem gövdesini karıştırarak üç veya dört satır kod ekler.

C# 10'da Basitleştirilmiş Yaklaşım – ArgumentNullException.ThrowIfNull()

Bu noktada, Tim modern C# 10 sözdizimini tanıtıyor. Geliştiriciler artık her parametre için birden fazla satır yazmak yerine, tek satırlık bir null kontrolü yazabilir.

ArgumentNullException.ThrowIfNull(message);
ArgumentNullException.ThrowIfNull(message);

Tim, bu tek satırlık kodun dahili olarak aynı doğrulama mantığını gerçekleştirdiğini açıklar. Eğer geçirilen argüman null ise, yöntem otomatik olarak bir istisna fırlatır—tıpkı öncesinde olduğu gibi—ancak çok daha temiz bir sözdizimiyle.

Program tekrar çalıştırıldığında, aşağıdaki çıktı görüntülenir:

System.ArgumentNullException: Value cannot be null. (Parameter 'message')
System.ArgumentNullException: Value cannot be null. (Parameter 'message')

Davranış aynıdır, ancak şimdi söz dizimi basitleştirildi. Yeni bir ArgumentNullException nesnesini bir kurucu kullanarak manuel olarak başlatmanıza veya paramName parametresini manuel olarak belirtmenize gerek yoktur. Arayanın parametre adı, derleyici tarafından otomatik olarak çıkarılır.

Tim, bu iyileştirmenin zaman kazandırdığını ve yanlış parametre adını referans alırken insan hatası olasılığını azalttığını vurgular.

Örnek: Birden Fazla Parametre

Tim daha sonra çoklu parametrelerin işlenmesinde geleneksel yöntemi yenisiyle karşılaştırır.

C# 10'dan önce, bir geliştirici şöyle yazabilirdi:

if (name is null)
    throw new ArgumentNullException(nameof(name));
if (email is null)
    throw new ArgumentNullException(nameof(email));
if (password is null)
    throw new ArgumentNullException(nameof(password));
if (name is null)
    throw new ArgumentNullException(nameof(name));
if (email is null)
    throw new ArgumentNullException(nameof(email));
if (password is null)
    throw new ArgumentNullException(nameof(password));

C# 10 geliştirmesi ile birlikte, aynı kontroller artık daha özlü bir şekilde yazılabilir:

ArgumentNullException.ThrowIfNull(name);
ArgumentNullException.ThrowIfNull(email);
ArgumentNullException.ThrowIfNull(password);
ArgumentNullException.ThrowIfNull(name);
ArgumentNullException.ThrowIfNull(email);
ArgumentNullException.ThrowIfNull(password);

Bu iyileştirme sadece daha az satırla ilgili değil—metotlarınızı daha temiz, daha okunabilir ve daha kolay bakım yapılabilir hale getirir. Tim, metodunuz üç parametre bekliyorsa, artık yalnızca üç null kontrolüne ihtiyaç duyduğunuzu ve on iki satır kod yerine daha az kod yazacağınızı belirtmektedir.

Neden Önemli – Daha Güvenli, Daha Sağlam Kod

Tim, bir demoda bir string'e manuel olarak null geçirmenin gerçekçi olmayabileceğini, ancak gerçek dünya problemlerini temsil ettiğini belirtiyor. API'ler, kullanıcı girişleri, serileştirme olmayan işlemler veya nesne döndüren işlemler beklenmedik bir şekilde null nesneler verebilir.

Bir metodun başında null kontrolleri ekleyerek, beklenmedik davranışları önler ve hızlı başarısız olursunuz—bu da, sorunun yayılmadan önce çağrı yığını içinde programın erken bir aşamada istisna fırlatması anlamına gelir.

Ayrıca, bu yeni söz diziminin, yöntemleriniz arasında tutarlı hata işleme desenlerini sürdürmenize yardımcı olduğunu belirtiyor. Geçersiz girdilere ve henüz örneklenmemiş nesnelere karşı dayanıklı sağlam kod yazmayı teşvik eder.

ArgumentNullException Ayrıntıları

Tim, ArgumentNullException'un System isim alanının bir parçası olduğunu ve ArgumentException sınıfından türediğini vurguluyor. Bu, geçerli bir bağımsız değişken olarak kabul etmeyen bir metoda null referans geçtiğinde atılır.

Genellikle şunları içerir:

Probleme neden olan parametre adı.

Açık bir hata mesajı: "Değer null olamaz."

  • İstisnanın meydana geldiği yeri gösteren çağrı yığını.

Tim'in örneği, .NET 6'nın bu davranışı sürdürürken söz dizimini nasıl geliştirdiğini göstermektedir.

Ayrıca geliştiricilerin, geri dönüş mantığı sağlamak için bu kontrolleri null birleşim operatörü (??) veya varsayılan değerler gibi diğer özelliklerle birleştirebileceklerini kısaca belirtir—örneğin:

message ??= "Default message";
message ??= "Default message";

Bu, istenirse bir yöntemle varsayılan bir değer atamanıza, atama sırasında bir hata yerine bunu gerçekleştirme olanağı sağlar.

Hata Yönetiminde Null Kontrolünün Önemi

Tim, geliştiricilere C# artık null geçerli referans türlerini desteklese de çalışma zamanı null kontrollerinin hala gerekli olduğunu hatırlatıyor. Derleyici her null referans sorununu yakalayamaz—özellikle de veriler harici kaynaklardan veya kontrolünüz dışındaki yöntemlerden geldiğinde.

Bunun uygun bir uygulama olduğunu vurgular; argümanlarınızı kontrol etmek ve gerektiğinde bir ArgumentNullException fırlatmak, yöntemin yalnızca girdiler geçerli olduğunda çalışmasını sağlamak iyi bir pratiktir. Bu, çalışma zamanı hatalarını en aza indirir, hata yönetimini basitleştirir ve sessiz hataların önüne geçer.

Sona Erme ve İleriye Bakış

Tim sonuçlandırırken, C# 11'in daha da fazla iyileştirme getireceğine dikkat çeker, ancak şu an için ArgumentNullException.ThrowIfNull(), .NET 6'da hata yönetimi ve kod güvenliği için en iyi küçük iyileştirmelerden biridir.

Kendi projelerinde bu yaklaşımı denemeleri ve yöntemlerinin ne kadar daha temiz göründüğünü görmeleri için geliştiricileri teşvik ediyor. O, bir soruyla bitiriyor: "C# 10'daki bu değişiklik hakkındaki düşünceleriniz nelerdir?"

Son Düşünceler

Tim Corey'nin videosu, ArgumentNullException.ThrowIfNull()'in C# 10'da basit ama güçlü bir iyileştirme olduğunu açıkça ortaya koyuyor. Hata yapmaya yatkın manuel kodları azaltır, geçerli argümanları garanti eder ve bir null argüman geçirildiğinde programlarınızın hızlı bir şekilde başarısız olmasını sağlar.

Bu yöntemi tutarlı bir şekilde kullanarak, geliştiriciler istisnaları düzenli bir şekilde yöneten ve ince null referans hatalarından kaçınan sağlam, okunabilir ve sürdürülebilir kodlar oluşturabilirler.

Kısacası, yöntemeniz geçerli bir parametre bekliyorsa ve null argümanları önlemek istiyorsanız, Tim Corey'nin örneğini takip edin ve kullanın:

ArgumentNullException.ThrowIfNull(parameterName);
ArgumentNullException.ThrowIfNull(parameterName);

Bu, null değerlerden ve çalışma zamanı hatalarından korunmak için .NET 6 ve sonrasında kodunuzu daha temiz, daha güvenli ve daha modern bir şekilde korumanın bir yoludur.

Hero Worlddot related to C# 10'da ve .NET 6'da 10 Dakika veya Daha Az Sürede Null Parametre Kontrolleri
Hero Affiliate related to C# 10'da ve .NET 6'da 10 Dakika veya Daha Az Sürede Null Parametre Kontrolleri

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js ile çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara