Null Koşullu İşleç
?. ile güvenli erişim.
Null Koşullu İşleç, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 2. 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 Zincirlerinin Sorunu
null bir başvurudaki üyeye erişmek NullReferenceException oluşturur. Bu, C# çalışma zamanındaki en yaygın çökmelerden biridir.
user.Address.City gibi çağrıları zincirlediğinizde zincirdeki herhangi bir bağlantı null olabilir; eskiden bunun çözümü, iç içe koşul denetimlerinden oluşan bir kuleydi.
?. İşleciyle Tanışın
Null koşullu işleç ?., ifadenin tamamını kısa devre yaparak durdurur. Sol taraf null ise sonuç bir özel durum yerine null olur.
Şöyle okunabilir: "Bu üyeye erişin, ancak yalnızca nesne null değilse."
string name = null;
int? length = name?.Length;
System.Console.WriteLine(length == null);Sonuç Null Kabul Edebilir
?. işleci null üretebildiği için sonuç türü null kabul eder. name?.Length ifadesinin türü int değil, int? olur.
Bu nedenle sonucu düz bir int yerine int? türünde saklarsınız.
string text = "hello";
int? len = text?.Length;
System.Console.WriteLine(len);Çalıştırılabilir Bir Örnek
Bu program, nesne mevcut olduğunda ?. işlecinin bir değer, mevcut olmadığında ise null döndürdüğünü gösterir.
Programı çalıştırın ve hiçbir özel durum oluşturulmadığına dikkat edin.
using System;
class Program
{
static void Main()
{
string a = "world";
string b = null;
Console.WriteLine(a?.ToUpper());
Console.WriteLine(b?.ToUpper() ?? "(null)");
}
}Birden Çok ?. İşlecini Zincirleme
?. işlecini birden çok üye boyunca zincirleyebilirsiniz. Herhangi bir bölüm null olur olmaz zincirin tamamı durur ve null döndürür.
Bu nedenle customer?.Order?.Total, customer veya Order null olsa bile güvenlidir.
string s = null;
int? upperLen = s?.ToUpper()?.Length;
System.Console.WriteLine(upperLen == null);Null Koşullu İndeksleyici ?[]
Diziler ve listeler için ?[] biçiminde bir indeksleyici de vardır. Koleksiyon null ise indeks erişimi çökme yerine null döndürür.
Not: Bu işlem koleksiyonun null olmasını denetler; aralık dışı bir indeksi denetlemez.
int[] data = null;
int? first = data?[0];
System.Console.WriteLine(first == null);Yöntemleri Güvenle Çağırma
?. işleci yöntem çağrılarını da korur. list?.Clear(), yalnızca list null değilse Clear yöntemini çağırır; aksi hâlde hiçbir şey yapmaz.
void döndüren bir yöntemde, değer null olduğunda tüm ifade basitçe etkisiz bir işleme dönüşür.
System.Collections.Generic.List<int> list = null;
list?.Add(5);
System.Console.WriteLine("No crash");Olayları İş Parçacığı Güvenli Biçimde Tetikleme
Klasik kullanım alanlarından biri olayları tetiklemektir. SomeEvent?.Invoke(this, args), yalnızca en az bir işleyici abone olmuşsa olayı güvenle tetikler.
Bu kullanım, denetim ile çağrı arasında yarış durumu oluşabilen eski null denetimi kalıbının yerini aldı.
System.Action handler = null;
handler?.Invoke();
System.Console.WriteLine("Invoked safely");?. ile ?? Birlikte Kullanımı
?. işleci, zincir null olduğunda yedek değer sağlamak için null birleştirme işleci ?? ile doğal biçimde birlikte kullanılır.
name?.Length ?? 0 uzunluğu verir; name null ise 0 döndürür.
string name = null;
int length = name?.Length ?? 0;
System.Console.WriteLine(length);İnce Bir Tuzak
Son değer türü null kabul etmese bile ?. kullanmak ifadeyi null kabul eder hâle getirir. list?.Count ifadesinin türü int değil, int? olur.
Düz bir int gerekiyorsa ifadenin sonuna ?? 0 ekleyin veya GetValueOrDefault() kullanın.
var list = new System.Collections.Generic.List<int> { 1, 2 };
int count = list?.Count ?? 0;
System.Console.WriteLine(count);Tam Karşılaştırma
Bu program, ayrıntılı koşul yaklaşımını kısa ?. sürümüyle karşılaştırır. Her ikisi de özel durumu önler, ancak ?. çok daha temizdir.
using System;
class Program
{
static void Main()
{
string s = null;
int len = s != null ? s.Length : -1;
Console.WriteLine(len);
Console.WriteLine(s?.Length ?? -1);
}
}Hızlı Kontrol
Null koşullu işleçle ilgili anlayışınızı sınayın.
Özet
Null koşullu işleç ?. (ve indeksleyici ?[]), nesne null olduğunda üye erişimini durdurur ve özel durum oluşturmak yerine null döndürür.
Sonuç null kabul eder; bu nedenle yedek bir değer sağlamak için işleci ?? ile birleştirin.
Sıkça Sorulan Sorular
“Null Koşullu İşleç” dersi ücretsiz mi?
Evet — “Null Koşullu İşleç” 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 İşleç” dersinde ne öğreneceğim?
?. ile güvenli erişim. 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 2. dersidir.
“Null Koşullu İşleç” 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.