Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
[[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.
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.
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.
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 Property Name As String
' A reference to another Person object representing the partner
Public Property Partner As Person
' An array representing the Person's hobbies
Public Property Hobbies As String()
End ClassO, 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 Nothing
Dim person As Person = Nothing
' Attempting to access a property of a Nothing 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 IsNot Nothing Then
Console.WriteLine(person.Name)
End IfBu 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.
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
Dim person As New Person With {.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.
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.
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(If(person?.Hobbies?.ElementAtOrDefault(0), Nothing))Burada, eğer person veya Hobbies null ise, ifade bir istisna neden olmadan null olarak değerlendirilir.
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!
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy