Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

C# 14'te Null-Conditional Assignment Nasıl Kullanılır?

csharp-14te-null-conditional-assignment-nasil-kullanilir
Bu yazıda neler var?
  1. C# 14'te Null-Conditional Assignment Nasıl Çalışır?
  2. Null-Conditional Assignment ile açık if yaklaşımı nasıl karşılaştırılır?
  3. Null nesne ve dolu nesne için çalışan C# örnekleri
  4. Sağ taraftaki ifade yan etkiliyse değerlendirme sırası nasıl ele alınır?
  5. Ne zaman null-conditional assignment, ne zaman açık if tercih edilmeli?
  6. Sık Sorulan Sorular

C# 14'te null-conditional assignment, null olabilen bir nesnenin üyesine koşullu atama yapar. customer?.Order = value; ifadesinde customer null ise atama atlanır, null değilse Order özelliğine value atanır.

Bu sözdizimi, null kontrolünü ayrı bir if bloğu yerine atama hedefindeki ?. işaretine taşır. Kullanabilmek için projenin C# 14 dil sürümünü destekleyen bir derleyiciyle derlenmesi ve hedef çerçevenin bu sürümle uyumlu olması gerekir.

C# 14'te Null-Conditional Assignment Nasıl Çalışır?

C# 14 ile birlikte null-conditional member access operatörü ?. ve null-conditional element access operatörü ?[], atama ifadesinin sol tarafında kullanılabilir. Özellik ataması için temel sözdizimi şöyledir:

customer?.Order = value;

Burada ?., customer nesnesinin null olup olmadığını kontrol eder. Nesne null ise Order özelliğinin set işlemi çağrılmaz. Nesne null değilse atama normal bir özellik ataması gibi gerçekleştirilir. Ayrıca atamanın sağ tarafındaki ifade yalnızca alıcı nesne null değilse değerlendirilir.

#nullable enable

Customer? customer = null;
string value = "ORD-100";

customer?.Order = value;
Console.WriteLine(customer is null ? "Atama yapılmadı" : customer.Order);

customer = new Customer();
customer?.Order = value;
Console.WriteLine(customer.Order);

public sealed class Customer
{
    public string Order { get; set; } = "";
}

Beklenen çıktı:

Atama yapılmadı
ORD-100

İlk atamada customer null olduğu için Order değişmez. İkinci atamada nesne oluşturulduğundan Order özelliğine değer verilir. Projenin dil sürümü hedef çerçeveden otomatik seçiliyorsa.NET 10 hedefi C# 14'ü varsayılan olarak kullanır. Dil sürümü açıkça belirtiliyorsa LangVersion değerinin 14.0 olması gerekir.

Null-Conditional Assignment ile açık if yaklaşımı nasıl karşılaştırılır?

Null-Conditional Assignment ile açık if yaklaşımı nasıl karşılaştırılır?

Basit bir değişken ve tek bir özellik ataması için aşağıdaki iki biçim aynı koşullu davranışı ifade eder. customer null ise atama yapılmaz, null değilse Order özelliğine value atanır. Null-conditional assignment biçiminde alıcı ifade yalnızca bir kez değerlendirilir.

if (customer is not null)
{
    customer.Order = value;
}

customer?.Order = value;
Karar ölçütü Geleneksel if Null-Conditional Assignment
Kontrolün açıkça görünmesi Null kontrolü ve çalışacak kod bloğu doğrudan görünür. Kontrol, ?. sözdiziminin içinde daha kısa biçimde ifade edilir.
Tek atamanın okunabilirliği Daha fazla satır kullanır, ancak alışılmış bir yapı sunar. Tek bir atamayı kısa ve doğrudan anlatır.
Birden fazla işlem ekleme kolaylığı Loglama, doğrulama veya başka bir işlem aynı blokta kolayca toplanabilir. Tek atama için yalındır; ek işlemler gerektiğinde ayrı bir akış gerekir.
Hata ayıklama Blok içine kesme noktası koymak ve adımları ayrı ayrı incelemek daha doğrudandır. Basit atamalarda akış kısadır; işlem karmaşıklaştığında açık if daha rahat incelenebilir.

Null durumunda yalnızca atlamanın yeterli olduğu tek bir atama için customer?.Order = value; okunabilir bir seçenek olabilir. Kontrolün görünür olması, birden fazla işlem eklenmesi veya akışın adım adım incelenmesi gerektiğinde ise geleneksel if yapısı daha elverişli olabilir.

Null nesne ve dolu nesne için çalışan C# örnekleri

Null nesne ve dolu nesne için çalışan C# örnekleri

C# 14 derleme koşulu: customer?.Order = value biçimindeki atama, null koşullu erişimin atamanın sol tarafında kullanılmasını sağlar ve C# 14 dil sürümüyle derlenmelidir. Customer? yazımı ise değişkenin null olabileceğini belirtir.

Null müşteri

#nullable enable
using System;

class Customer
{
    public string? Order { get; set; }
}

class Program
{
    static void Main()
    {
        Customer? customer = null;
        string value = "A-100";

        customer?.Order = value;

        Console.WriteLine(customer is null
            ? "Müşteri yok"
            : customer.Order ?? "Sipariş yok");
    }
}

Beklenen çıktı: Müşteri yok

customer null olduğu için customer?.Order = value satırı özelliğe erişmez ve atama yapılmaz. Böylece null nesne üzerinden özellik kullanmaya çalışmaktan kaynaklanabilecek hata önlenir.

Dolu müşteri

#nullable enable
using System;

class Customer
{
    public string? Order { get; set; }
}

class Program
{
    static void Main()
    {
        Customer? customer = new Customer();
        string value = "A-100";

        customer?.Order = value;

        Console.WriteLine(customer?.Order ?? "Sipariş yok");
    }
}

Beklenen çıktı: A-100

Bu kez customer null olmadığı için Order özelliğine A-100 değeri atanır. Null ve dolu nesne davranışını pekiştirmek için C# bilgi testini çözerek temel sözdizimi konularını deneyebilirsin.

Sağ taraftaki ifade yan etkiliyse değerlendirme sırası nasıl ele alınır?

customer?.Order = GetOrder(); satırında önce null koşulu kontrol edilir. customer null ise sağ taraftaki GetOrder() çağrılmaz. Nesne null değilse metot çalışır, döndürdüğü değer hesaplanır ve ardından Order özelliğine atanır.

#nullable enable
using System;

class Customer
{
    public string? Order { get; set; }
}

class Program
{
    static int callCount;

    static string GetOrder()
    {
        callCount++;
        Console.WriteLine("GetOrder çalıştı");
        return $"A-{callCount:000}";
    }

    static void Main()
    {
        Customer? customer = null;

        customer?.Order = GetOrder();
        Console.WriteLine($"Null durumunda çağrı sayısı: {callCount}");

        customer = new Customer();

        customer?.Order = GetOrder();
        Console.WriteLine($"Dolu durumda sipariş: {customer?.Order}");
        Console.WriteLine($"Toplam çağrı: {callCount}");
    }
}

Beklenen iz çıktısı:

Null durumunda çağrı sayısı: 0
GetOrder çalıştı
Dolu durumda sipariş: A-001
Toplam çağrı: 1

İlk atama satırında customer null olduğu için GetOrder() gövdesi çalışmaz. Bu nedenle ekrana bilgi yazılmaz ve sayaç 0 olarak kalır. İkinci atamada nesne oluşturulduğundan metot çalışır, sayaç artar, GetOrder çalıştı çıktısı üretilir ve dönen A-001 değeri Order özelliğine atanır.

Hesaplama, loglama veya doğrulama önemli bir adımı temsil ediyorsa açık if (customer is not null) kullanımı daha okunaklı olabilir. Koşulu ve yapılacak işlemi ayrı satırlarda göstermek, yan etkili kodun izlenmesini kolaylaştırır.

Ne zaman null-conditional assignment, ne zaman açık if tercih edilmeli?

Null-conditional assignment, tek bir atamayı hedef nesne null değilse gerçekleştiren kısa bir yazımdır. Karar verirken yalnızca kodun kısalığına değil, koşullu akışın ne kadar görünür olması gerektiğine de bakmalısın.

  1. Yalnızca tek ve doğrudan atama varsa: customer?.Order = value; gibi tek adımlı bir atama, kısa sözdizimiyle anlaşılır kalabilir.
  2. null durumunda ek işlem gerekmiyorsa: Nesne null olduğunda yalnızca atlamanın yeterli olduğu durumlarda null-conditional assignment uygun bir seçenek olabilir.
  3. Sağ tarafta yan etki bulunmuyorsa: Değer basit bir değişkenden geliyor veya sonucu dışarıdan gözlemlenebilir bir metot çağrısı içermiyorsa kısa yazım daha rahat okunabilir. Yan etkili işlemler kontrol akışının ayrıca görünür olmasını gerektirebilir.
  4. Birden fazla işlem ya da else dalı gerekmiyorsa: Atamaya ek olarak loglama, hata işleme, başka bir metot çağrısı veya alternatif bir işlem yapılacaksa açık if yaklaşımı daha elverişlidir.

Bu ölçütlerden biri karşılanmıyorsa açık if kullanmak, hangi işlemlerin hangi koşulda çalıştığını daha belirgin hâle getirir. Null-conditional assignment ise koşulun ve atamanın tek satırda doğal biçimde ifade edilebildiği durumlarda okunabilirliği destekleyebilir. Burada amaç tek bir yazımı her yerde kullanmak değil, kodun niyetini en açık biçimde aktarmaktır.

Benzer C# ve.NET konularındaki sözdizimi açıklamalarını ve uygulama örneklerini bilgi verici C# yazıları arasında inceleyebilirsin.

Sık Sorulan Sorular

customer?.Order = value ifadesinde customer null olduğunda sağ taraf değerlendirilir mi?

Hayır. customer null olduğunda atama yapılmaz ve value ifadesi değerlendirilmez. Bu davranış, sağ tarafta metot çağrısı bulunduğunda da geçerlidir.

Null-conditional assignment hangi durumlarda açık if yaklaşımından daha okunaklıdır?

Tek bir null kontrolü, tek bir doğrudan atama ve null durumunda ek işlem yoksa daha okunaklı olabilir. Koşulun anlamı tek satırda kaybolmuyorsa kısa yazım tercih edilebilir.

Sağ tarafta metot çağrısı veya başka bir yan etki varsa hangi yazım tercih edilmelidir?

Yan etkili ya da dikkatle izlenmesi gereken bir işlem varsa açık if yaklaşımı genellikle daha anlaşılırdır. Böylece çağrının hangi koşulda çalıştığı görünür olur. Çağrının yalnızca null olmayan hedef için yapılması özellikle isteniyor ve akış tek adımdan oluşuyorsa null-conditional assignment da değerlendirilebilir.

C# 14 null-conditional assignment için hangi dil sürümü veya derleyici koşulları gerekir?

Bu sözdizimini tanıyan C# 14 derleyicisi gerekir. Microsoft Learn, C# 14 özelliklerinin.NET 10 SDK veya Visual Studio 2026 ile kullanılabildiğini belirtiyor. Projenin seçtiği dil sürümü de C# 14 sözdizimini kapsamalıdır.

Özetle, tek adımlı ve yan etkisiz atamalarda kısa yazım, akışın ayrıntılı biçimde görünmesi gereken durumlarda ise açık if yaklaşımı değerlendirilebilir.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara