Null Değerlere Karşı Koruma
Doğrulama ve kalıplar.
Null Değerlere Karşı Koruma, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 4. 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'a Karşı Neden Koruma Yapılır?
Beklenmeyen bir null alan bir yöntem, çoğu zaman çağrı yığınının derinliklerinde kafa karıştırıcı bir NullReferenceException ile daha sonra çöker.
Koruma yapmak, bağımsız değişkenleri en başta denetleyip açıkça başarısız olmak demektir; böylece hata doğrudan asıl nedeni gösterir.
Klasik Null Denetimi
En basit koruma, zorunlu bir bağımsız değişken null olduğunda ArgumentNullException oluşturan açık bir denetimdir.
Bu işlem, herhangi bir çalışma başlamadan önce yöntemin sınırında girdiyi doğrular.
void Save(string path)
{
if (path == null)
throw new System.ArgumentNullException(nameof(path));
System.Console.WriteLine(path);
}nameof Kullanımı
Sabit bir dize geçirmek yerine nameof(path) kullanın. Böylece özel durum tam parametre adını bildirir ve parametreyi yeniden adlandırsanız bile doğru kalır.
Özel durum günlüğe kaydedildiğinde bu yaklaşım hata ayıklamayı çok kolaylaştırır.
void Greet(string user)
{
if (user is null)
throw new System.ArgumentNullException(nameof(user));
System.Console.WriteLine("Hi " + user);
}ThrowIfNull Yardımcısı
Modern C#, ArgumentNullException.ThrowIfNull(arg) kullanımını sunar. Bu, null denetimi yapar ve doğru parametre adını otomatik olarak kullanarak özel durum oluşturur.
Kısadır ve güncel .NET kodunda tercih edilen koruma biçimidir.
void Process(object data)
{
System.ArgumentNullException.ThrowIfNull(data);
System.Console.WriteLine("Processing");
}Çalıştırılabilir Bir Koruma Örneği
Bu program, null bir bağımsız değişkeni yakalayan ve daha sonra çökmek yerine durumu temiz biçimde bildiren bir korumayı gösterir.
Hatalı parametrenin adını içeren özel durum iletisini görmek için programı çalıştırın.
using System;
class Program
{
static void Print(string text)
{
ArgumentNullException.ThrowIfNull(text);
Console.WriteLine(text);
}
static void Main()
{
try { Print(null); }
catch (ArgumentNullException ex) { Console.WriteLine(ex.ParamName); }
}
}?? throw ile Koruma
Atama ile korumayı ?? ve throw kullanarak birleştirebilirsiniz. Bu işlem doğrulamayı ve saklamayı tek satırda yapar.
Bu, bir alana atama yapılırken oluşturucularda sık kullanılan bir kalıptır.
class Service
{
private readonly string _name;
public Service(string name)
=> _name = name ?? throw new System.ArgumentNullException(nameof(name));
}Boş ile Null Arasındaki Fark
Dizeler için null ve boş olmak farklı sorunlardır. Her ikisini aynı anda yakalamak için string.IsNullOrEmpty veya string.IsNullOrWhiteSpace kullanın.
Boş ama null olmayan bir değer için ArgumentNullException değil, ArgumentException uygundur.
void SetName(string name)
{
if (string.IsNullOrWhiteSpace(name))
throw new System.ArgumentException("Name required", nameof(name));
}Desenlerle Koruma
is null ve is not null desenleri açıkça okunur ve aşırı yüklenmiş eşitlik işleçleri tarafından yanıltılamaz.
Bir türün == işlecini geçersiz kılma ihtimali varsa == null yerine is null kullanmayı tercih edin.
object value = null;
if (value is null)
System.Console.WriteLine("It is null");
if (value is not null)
System.Console.WriteLine("Has value");Özel Durum Oluşturmak Yerine Varsayılan Değer Kullanma
Her null bir hata değildir. Bazen özel durum oluşturmak yerine uygun bir varsayılan değer kullanmak daha iyidir.
Null kabul edilebilirse ?? kullanın; yalnızca değer gerçekten zorunlu olduğunda özel durum oluşturun.
string BuildPath(string folder)
{
folder ??= "/tmp";
return folder + "/file.txt";
}Null Kabul Eden Başvuru Türlerinin Faydası
Null kabul eden başvuru türleri etkinleştirildiğinde derleyici, null olabilecek bir değere başvurmanız durumunda sizi uyarır ve hataları çalışma zamanından önce yakalar.
string (null kabul etmeyen) ile string? (null kabul eden) bildirimleri, niyetinizi belgeler ve çözümleyiciye yol gösterir.
#nullable enable
string required = "ok";
string? optional = null;
System.Console.WriteLine(optional?.Length ?? 0);Koruyun, Sonra Güvenle Kullanın
Bir yöntemin başında koruma yaptıktan sonra gövdenin geri kalanında değeri tekrarlanan null denetimleri olmadan kullanabilirsiniz.
Bu program önce koruma yapar, ardından bağımsız değişkeni güvenle kullanır.
using System;
class Program
{
static int Length(string s)
{
ArgumentNullException.ThrowIfNull(s);
return s.Length;
}
static void Main()
{
Console.WriteLine(Length("hello"));
}
}Hızlı Kontrol
Null'a karşı koruma yapmayla ilgili anlayışınızı sınayın.
Özet
Zorunlu bağımsız değişkenleri bir yöntemin başında koruyun. Açık hatalar için ArgumentNullException.ThrowIfNull veya nameof ile birlikte ?? throw kullanın.
Boş dizeler için string.IsNullOrWhiteSpace, güvenli denetimler için is null desenlerini kullanın; başarısız olmak yerine varsayılan bir değer kabul edilebiliyorsa ?? kullanın.
Sıkça Sorulan Sorular
“Null Değerlere Karşı Koruma” dersi ücretsiz mi?
Evet — “Null Değerlere Karşı Koruma” 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 Değerlere Karşı Koruma” dersinde ne öğreneceğim?
Doğrulama ve kalıplar. 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 4. dersidir.
“Null Değerlere Karşı Koruma” 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
- Nullable Değer Türleri
- Null Koşullu İşleç
- Null Birleştirme İşleçleri
- Null Değerlere Karşı Koruma