C# Null-Koşullu Operatör
[[academy-video-youtube({"vid": "eOpmjGF4qxo", "start_time": "0", "title": "C# Null-Conditional Operator (? } Operatör) Açıklandı!", "yaratıcı": "Gerald Versluis", "süre": "13d 26s"})]]
Videolarının birinde Gerald Versluis, örnek kodundaki soru işareti (?) hakkında bir soru ile karşılaştı. Bu, onu C#'ta null-koşul operatörünü açıklayan detaylı bir video yaratmaya yönlendirdi. Eğer C# dilinde ?. veya ?[ ] ne yapıyor diye merak ettiyseniz, Gerald'ın videosu bunu net bir şekilde anlamak için harika bir kaynaktır. Onun açıklamasını adım adım inceleyelim.
Dokümanlar Sayfası ile Hızlı Açıklama
Gerald, üye erişim operatörleri ve ifadeleriyle ilgili resmi Microsoft belgelerine atıfta bulunarak başlar. C#, 6 sürümünde tanıtılan null-koşullu operatöre dair kısmı vurguladı. Kayıt sırasında, C# 9 en son versiyondu ve ufukta C# 10 bulunuyordu.
Gerald, a?.x veya a?[index] kullandığınızda, eğer a null ise, tüm ifadeyi NullReferenceException fırlatmak yerine null olarak değerlendirdiğini açıklar. Aksi takdirde, değeri normal şekilde alır.
Dokümantasyon yardımcı olsa da, Gerald uygulamalı örnekleri tercih ediyor, bu yüzden etkileşimli bir kodlama ortamına geçiyor.
try.dot.net Üzerinden Örnek
Gösterim için, Gerald etkileşimli bir C# ortamı olan try.dot.net'e geçer. Bu aracın Blazor üzerinde çalıştığını, böylece kullanıcıların C# kodunu doğrudan bir tarayıcıda çalıştırmasına olanak tanıdığını belirtiyor.
O, kısaca try.dot.net'te önceden yüklenmiş olan varsayılan Fibonacci dizisi örneğini gösterir ve ardından null-şartlı operatöre odaklanan yeni bir örneğe başlamak için temizler.
Null Koşullu Operatörler Açıklandı
Gerald, aşağıdaki özelliklere sahip basit bir Person sınıfı oluşturur:
public class Person
{
// The Name property of the Person
public string Name { get; set; }
// A reference to another Person object representing the partner
public Person Partner { get; set; }
// An array representing the Person's hobbies
public string[] Hobbies { get; set; }
}public class Person
{
// The Name property of the Person
public string Name { get; set; }
// A reference to another Person object representing the partner
public Person Partner { get; set; }
// An array representing the Person's hobbies
public string[] Hobbies { get; set; }
}O, null olarak bir Person nesnesi başlatır:
// Initialize a Person object as null
Person person = null;
// Attempting to access a property of a null object will throw a NullReferenceException
Console.WriteLine(person.Name);// Initialize a Person object as null
Person person = null;
// Attempting to access a property of a null object will throw a NullReferenceException
Console.WriteLine(person.Name);Bu kodu çalıştırmak, person null olduğu için bir NullReferenceException fırlatır. Bu durumu önlemek için, geliştiriciler genellikle özelliklere erişmeden önce null kontrolü ekler:
// Check if the person object is not null before accessing its properties
if (person != null)
{
Console.WriteLine(person.Name);
}// Check if the person object is not null before accessing its properties
if (person != null)
{
Console.WriteLine(person.Name);
}Bu işe yarasa da, ek kod satırları getirir. Gerald, null-koşul operatörünün bunu nasıl basitleştirdiğini açıklar:
// Using the null-conditional operator to safely access the Name property
Console.WriteLine(person?.Name);// Using the null-conditional operator to safely access the Name property
Console.WriteLine(person?.Name);Şimdi, person null ise, ifade çökme yerine basitçe null döndürür.
Özelliklerde Null-Koşullu Operatör
Gerald, bir Person nesnesi kurarak örneği genişletir:
// Create a new Person object
Person person = new Person { Name = "Gerald" };
// Access the Name property safely
Console.WriteLine(person?.Name);// Create a new Person object
Person person = new Person { Name = "Gerald" };
// Access the Name property safely
Console.WriteLine(person?.Name);Çünkü person null değil, doğru bir şekilde "Gerald" yazdırır.
Ardından, iç içe geçmiş bir örnek gösteriyor:
// Safely access the Name property of the Partner object
Console.WriteLine(person?.Partner?.Name);// Safely access the Name property of the Partner object
Console.WriteLine(person?.Partner?.Name);Eğer person.Partner null ise, tüm ifade bir istisna fırlatmak yerine null olarak değerlendirilir. Bu, gereksiz if koşullarını önler.
Null-Koşullu Operatörleri Zincirleme
Gerald, null-koşul operatörlerinin zincirlenebileceğini ve bu sayede derinlemesine iç içe geçmiş nesnelerle uğraşırken kodun daha temiz hale getirilebileceğini açıklıyor. Birden fazla null kontrolü yazmak yerine, şunu kullanabilirsiniz:
// Chain null-conditional operators to safely access nested objects
Console.WriteLine(person?.Partner?.Name);// Chain null-conditional operators to safely access nested objects
Console.WriteLine(person?.Partner?.Name);Eğer person veya person.Partner null ise, sonuç null olacak ve çalışma zamanı hatalarını önleyecektir.
Dizilerde Null-Şartlı Operatörler
Gerald, tartışmayı diziler ve koleksiyonlar konusuna genişletiyor. Person sınıfına Hobbies dizisi ekliyor ve elemanlara güvenli bir şekilde nasıl erişileceğini gösteriyor:
// Safely access the first element of the Hobbies array
Console.WriteLine(person?.Hobbies?[0]);// Safely access the first element of the Hobbies array
Console.WriteLine(person?.Hobbies?[0]);Burada, eğer person veya Hobbies null ise, ifade bir istisna neden olmadan null olarak değerlendirilir.
Sonuç
Gerald'in videosu, C#'teki null-şartlı operatöre derinlemesine bir bakış sunuyor. ?. ve ?[ ] kullanarak, geliştiriciler NullReferenceException'dan kaçınan daha temiz ve güvenli kodlar yazabilir. İster özelliklerle, ister iç içe geçmiş nesnelerle ya da dizilerle çalışıyor olun, boş koşullu operatörü kodu daha öz ve okunaklı hale getirir.
Detaylı bir demo için, Gerald Versluis'in videosunu izleyin. Her şeyi pratik örneklerle açıklıyor!

