Null olabilen başvuru türleri (farkındalık) ve ek açıklamalar (C# 6 kalıpları)
C# 6, null olabilen başvuru türlerini (string?) desteklemez. Güvenli null işlemlerini öğrenin: girdi kontrolleri, açık belgeler, yardımcı Require.NotNull ve değer türleri için Nullable ile karşılaştırma.
Null olabilen başvuru türleri (farkındalık) ve ek açıklamalar (C# 6 kalıpları), CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 3 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 3 dersten oluşur.
NRT farkındalığı ve geri dönüş
Fikir: Boş değer alabilen başvuru türleri (örneğin string?), yeni C# sürümlerinde derleyici denetimleri ekler.
- C# 6, string? desteği sunmaz.
- Korumalar, açık belgeler ve basit yardımcılar kullanın.
- Varsayılan olarak boş olmayan değer döndürün.
Boş değerlere karşı koruma
Başvuru türü parametreleri için ArgumentNullException korumaları ekleyin; ardından değerleri boş olmayan değerler olarak ele alın.
using System;
public static class Greeter
{
// Contract: name must not be null (C# 6 has no string? to enforce)
public static string Hello(string name)
{
if (name == null) throw new ArgumentNullException("name"); // guard
return "Hello " + name.ToUpper(); // safe after guard
}
}
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine(Greeter.Hello("Ada"));
try
{
Console.WriteLine(Greeter.Hello(null)); // will throw (by design)
}
catch (Exception ex)
{
Console.WriteLine("Caught: " + ex.GetType().Name);
}
}
}
Require.NotNull yardımcısı
Tekrarlanan kodu azaltmak ve amacı açıkça belirtmek için küçük bir Require.NotNull yardımcısı oluşturun.
using System;
public static class Require
{
// Works for reference types; returns the validated value
public static T NotNull<T>(T value, string name) where T : class
{
if (value == null) throw new ArgumentNullException(name);
return value;
}
}
public sealed class Email
{
public string Address { get; private set; }
public Email(string address)
{
Address = Require.NotNull(address, "address").Trim();
}
}
public class Program
{
public static void Main(string[] args)
{
Email e = new Email("user@mail.com");
Console.WriteLine(e.Address);
}
}
Nullable<T> ve başvuru türleri
Nullable<T> (örneğin int?) değer türleri içindir. Başvuru türleri zaten boş olabilir; C# 6'da korumalar kullanırız.
using System;
public class Program
{
public static void Main(string[] args)
{
int x = 5; // value type (non-nullable)
int? maybe = null; // Nullable<T> works for value types
Console.WriteLine("x=" + x);
Console.WriteLine("maybe has value? " + maybe.HasValue);
Console.WriteLine("maybe or default: " + (maybe ?? -1));
}
}
Boş değer sözleşmelerini belgeleme
Boş değer durumunu XML belgelerinde belirtin ve tutarlı olun: ya her zaman boş olmayan değerler döndürün ya da boş değerin mümkün olduğu durumları açıkça belgeleyin.
using System;
/// <summary>
/// Parses "key=value" and returns the value part.
/// Returns null if the format is invalid.
/// </summary>
public static class Parser
{
// Explicitly document when null can be returned.
public static string TryGetValue(string line)
{
if (line == null) throw new ArgumentNullException("line");
int idx = line.IndexOf("=");
if (idx < 0 || idx == line.Length - 1) return null; // documented nullable return
return line.Substring(idx + 1);
}
}
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine(Parser.TryGetValue("a=1"));
Console.WriteLine(Parser.TryGetValue("oops")); // prints nothing (null)
}
}
Boş değer güvenliği kontrol listesi (C# 6)
Kontrol listesi:
- Girdileri ArgumentNullException ile denetleyin.
- Varsayılan olarak boş olmayan değer döndürün; boş değer alabilen dönüşleri belgeleyin.
- Kodu düzenli tutmak için küçük yardımcılar (Require.NotNull) kullanın.
- Mantıklı olduğunda boş değerleri önleyen aşırı yüklemeleri tercih edin (örneğin null yerine boş dize).
C# 6'da boş değer güvenliği
Tekrar
Tekrar: NRT'ler daha yeni bir özelliktir. C# 6'da korumalar, açık belgeler, yardımcı yöntemler ve öngörülebilir boş olmayan dönüş sözleşmeleriyle güvenli kalın.
Sıkça Sorulan Sorular
“Null olabilen başvuru türleri (farkındalık) ve ek açıklamalar (C# 6 kalıpları)” dersi ücretsiz mi?
Evet — “Null olabilen başvuru türleri (farkındalık) ve ek açıklamalar (C# 6 kalıpları)” 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 3 dersten oluşur.
“Null olabilen başvuru türleri (farkındalık) ve ek açıklamalar (C# 6 kalıpları)” dersinde ne öğreneceğim?
C# 6, null olabilen başvuru türlerini (string?) desteklemez. Güvenli null işlemlerini öğrenin: girdi kontrolleri, açık belgeler, yardımcı Require.NotNull ve değer türleri için Nullable ile karşılaştı… 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, 3 dersinin 3. dersidir.
“Null olabilen başvuru türleri (farkındalık) ve ek açıklamalar (C# 6 kalıpları)” 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
- Generic yöntemler/türler ve kısıtlamalar
- Arayüzler ve temsilcilerle varyans (in/out)
- Null olabilen başvuru türleri (farkındalık) ve ek açıklamalar (C# 6 kalıpları)