0Pricing
C# Academy · Ders

Null Koşullu ve Null Birleştirme Operatörleri

Ayrıntılı null denetimleri olmadan kısa ve null güvenli kod yazmak için ?., ?[], ?? ve ??= operatörlerini birleştirin.

Null Koşullu ve Null Birleştirme Operatörleri, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.

Null Güvenli Kod Kalıpları

C#, null değerlerini kısa biçimde ele almak için üç özel işleç sunar: null koşullu (?., ?[]), null birleştirme (??) ve null birleştirme ataması (??=). Birlikte kullanıldıklarında, uzun null denetimi kodlarının çoğunu ortadan kaldırırlar.

Null Koşullu İşleç: ?.

?., sol taraf null olduğunda NullReferenceException fırlatmak yerine işlemi kısa devre yaparak null döndürür. Sonuç türü nullable hâle gelir.

User? user = GetUser(id);

// Without ?.:
string? name = null;
if (user != null) name = user.Name;

// With ?.:
string? name2 = user?.Name;

// Chained:
string? city = user?.Address?.City;

// Method call:
string? upper = user?.Name?.ToUpper();

Dizin Erişimiyle Null Koşullu İşleç: ?[]

?[], null koşullu dizin işleçidir. Koleksiyonun kendisi null olabileceğinde dizi veya koleksiyon öğelerine güvenli biçimde erişmenizi sağlar.

List<string>? tags = product?.Tags;

// Safe index access
string? firstTag = tags?[0];

// Null-conditional LINQ
int? count = tags?.Count;
bool? hasItems = tags?.Any();

// With methods:
string? joined = tags?.FirstOrDefault()?.ToUpper();

Null Birleştirme İşleci: ??

??, sol işlenen null değilse onu, aksi takdirde sağ işleneni (yedek değeri) döndürür. x != null ? x : fallback ifadesinin kısa biçimdeki karşılığıdır.

string? name = GetName();

// Without ??:
string display = name != null ? name : "Anonymous";

// With ??:
string display2 = name ?? "Anonymous";

// Chaining ?? for multiple fallbacks:
string result = primary ?? secondary ?? tertiary ?? "Default";

// Combining with ?.
string city = user?.Address?.City ?? "Unknown City";

Null-Birleştirme Ataması: ??=

??=, sağ taraftaki değeri yalnızca değişken o anda null ise değişkene atar. Tembel başlatma desenleri için idealdir.

// Lazy initialization
private List<string>? _cache;

public List<string> GetCache()
{
    _cache ??= new List<string>(); // only assigns if null
    return _cache;
}

// Equivalent to:
// if (_cache is null) _cache = new List<string>();

// In-place:
string? name = null;
name ??= "Default";
Console.WriteLine(name); // "Default"

Olaylarda ?. Kullanımı

Null-koşullu işleç, olayları çağırmanın standart iş parçacığı güvenli yoludur; ayrı bir null denetimi ile çağırmanın oluşturabileceği yarış durumunu önler.

public event EventHandler<DataEventArgs>? DataReceived;

// Thread-safe event invocation:
DataReceived?.Invoke(this, new DataEventArgs(data));

// This is equivalent to:
var handler = DataReceived;
if (handler != null) handler(this, new DataEventArgs(data));
// (local copy avoids race condition between check and invoke)

Karmaşık Zincirleme Örnekleri

İşleçleri birleştirmek, iç içe geçmiş nesne grafikleri arasında temiz ve okunabilir, null güvenli bir gezinme sağlar.

var order = GetOrder(id);

// Deeply nested with fallbacks:
string countryCode = order
    ?.Customer
    ?.ShippingAddress
    ?.Country
    ?.Code
    ?? "US";

// Collection safe access:
decimal firstLineTotal = order
    ?.Lines
    ?.FirstOrDefault()
    ?.Total
    ?? 0m;

// Method chain:
string? trackingUpper = order?.TrackingNumber?.ToUpper().Trim();

LINQ'te Null-Koşullu Kullanım

Null-koşullu işleç LINQ ile sorunsuz biçimde çalışır ve null olabilir koleksiyonlar veya özellikler üzerinde güvenli sorgular yazmanıza olanak tanır.

List<Order>? orders = customer?.Orders;

// Safe LINQ on a nullable collection:
var totalRevenue = orders?.Sum(o => o.Total) ?? 0m;
var pendingCount = orders?.Count(o => o.Status == OrderStatus.Pending) ?? 0;
var latest       = orders?.MaxBy(o => o.PlacedAt)?.Id;

ThrowIfNull ile Null Koruması

Null olmaması gereken parametreler için, yöntem girişinde kısa ve açıklayıcı bir doğrulama yapmak üzere ArgumentNullException.ThrowIfNull() (.NET 6+) kullanın.

public void ProcessOrder(Order order, Customer customer)
{
    ArgumentNullException.ThrowIfNull(order);
    ArgumentNullException.ThrowIfNull(customer);

    // From this point, compiler knows both are non-null
    Console.WriteLine(order.Id);
    Console.WriteLine(customer.Name);
}

// .NET 7+: ArgumentException.ThrowIfNullOrEmpty
void Save(string name)
{
    ArgumentException.ThrowIfNullOrWhiteSpace(name);
    // name is guaranteed non-empty
}

Switch'te Null Değil Deseni

is not null ve is { } ile desen eşleştirme, özellikle switch ifadelerinde temiz null denetimi desenleri sunar.

string Describe(object? obj) => obj switch
{
    null                          => "nothing",
    string s when s.Length == 0  => "empty string",
    string s                      => $"string: {s}",
    int i                         => $"integer: {i}",
    { }                           => $"object: {obj.GetType().Name}"
};

// is not null in if statements:
if (order is not null && order.Customer is { Name: var name })
    Console.WriteLine(name);

Hızlı Denetim

user?.Name ?? "Anonymous" ifadesi, user null olduğunda ne döndürür?

Özet: Null-Koşullu ve Null-Birleştirme

Önemli noktalar:

  • ?.: güvenli üye erişimi; null alıcı üzerinde hata fırlatmak yerine null döndürür
  • ?[]: null olabilen koleksiyonlarda güvenli dizin erişimi
  • ??: sol işlenen null olduğunda kullanılan alternatif değer
  • ??=: yalnızca null ise atama yapar; tembel başlatma için idealdir
  • Zincirleyin: derin ve null güvenli gezinme için a?.B?.C ?? defaultVal
  • Parametre doğrulama korumaları için ArgumentNullException.ThrowIfNull()

Sıkça Sorulan Sorular

“Null Koşullu ve Null Birleştirme Operatörleri” dersi ücretsiz mi?

Evet — “Null Koşullu ve Null Birleştirme Operatörleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.

“Null Koşullu ve Null Birleştirme Operatörleri” dersinde ne öğreneceğim?

Ayrıntılı null denetimleri olmadan kısa ve null güvenli kod yazmak için ?., ?[], ?? ve ??= operatörlerini birleştirin. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Null Koşullu ve Null Birleştirme Operatörleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. NRT'yi Etkinleştirme ve Anlama
  2. Ek Açıklamalar: ?, !, MaybeNull ve NotNull
  3. Null Koşullu ve Null Birleştirme Operatörleri
  4. Bir Kod Tabanını NRT'ye Geçirme
← C# Academy Sayfasına Dön