Tür ve Özellik Kalıpları
Biçim ve üyeler üzerinden eşleştirin.
Tür ve Özellik Kalıpları, 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.
Tür Deseni
Bir tür deseni, girdi belirli bir türün örneği olduğunda eşleşir. Bir switch kolunda yalnızca tür adı yazılarak kullanılır ve değerin çalışma zamanı türünü sınar.
Bu yaklaşım, hantal is ve tür dönüşümü zincirlerinin yerini alır; ayrıca türü sizin için daraltan temiz, tek ifadeli bir denetim sağlar.
object o = "hello";
string kind = o switch
{
int => "number",
string => "text",
_ => "unknown"
};
System.Console.WriteLine(kind);Bildirim Desenleri
Bir bildirim deseni, türün ardından bir değişken adı ekler: string s. Eşleşme gerçekleştiğinde girdi türe dönüştürülür ve bu değişkene bağlanır.
Ardından kolun sağ tarafında türü belirlenmiş değişkeni kullanabilir ve ek bir tür dönüşümü yapmadan bu türe özgü üyelere erişebilirsiniz.
object o = "coddy";
string result = o switch
{
string s => $"len {s.Length}",
int n => $"value {n}",
_ => "other"
};
System.Console.WriteLine(result);Çalışan Bir Tür switch'i
Tür desenleri, bir object dizisindeki değerleri ayrıştırmak gibi farklı türlerdeki verileri işlemek için mükemmeldir.
Burada her öğe çalışma zamanı türüne göre eşleştirilir ve uygun biçimde biçimlendirilir. Bağlanan değişken, daraltılmış türü sonuç ifadesine taşır.
using System;
class Program {
static string Describe(object o) => o switch {
int i => $"int {i}",
double d => $"double {d}",
string s => $"string '{s}'",
_ => "?"
};
static void Main() {
foreach (var x in new object[]{ 1, 2.5, "hi" })
Console.WriteLine(Describe(x));
}
}Özellik Deseni
Bir özellik deseni, bir nesnenin üyelerini süslü parantezlerle inceler: { Property: value }. Listelenen her özellik kendi içindeki deseni karşıladığında eşleşir.
Bu, elle üye karşılaştırmaları yazmadan doğrudan bir nesnenin şekline ve içeriğine göre dallanmanıza olanak tanır.
record Person(string Name, int Age);
var p = new Person("Ada", 30);
string stage = p switch
{
{ Age: < 18 } => "minor",
{ Age: >= 65 } => "senior",
_ => "adult"
};
System.Console.WriteLine(stage);Birden Çok Özellik
Süslü parantezlerin içinde özellikleri virgüllerle ayırarak aynı anda birkaç özelliği sınayabilirsiniz. Kolun uygulanması için hepsinin eşleşmesi gerekir.
Bu, hem belirli bir duruma hem de belirli bir sayıya sahip bir nesneyi eşleştirmek gibi bileşik koşulları açıkça ifade eder.
record Order(string Status, int Items);
var order = new Order("Open", 0);
string msg = order switch
{
{ Status: "Open", Items: 0 } => "empty cart",
{ Status: "Open" } => "shopping",
_ => "closed"
};
System.Console.WriteLine(msg);Tür ve Özellik Desenlerini Birleştirme
Tür ve özellik desenleri birleştirilebilir: önce türü, ardından özelliklerden oluşan bir süslü parantez bloğunu yazın. Kol yalnızca girdi bu türdeyse ve özellikleri eşleşiyorsa eşleşir.
Bu yaklaşım, temel sınıf başvurularını veya arabirimleri işlerken somut alt türlere ve bunların durumuna aynı anda göre dallanmak istediğinizde güçlüdür.
using System;
abstract record Shape;
record Circle(double R) : Shape;
record Square(double Side) : Shape;
class Program {
static string Big(Shape s) => s switch {
Circle { R: > 10 } => "big circle",
Square { Side: > 10 } => "big square",
_ => "small"
};
static void Main() => Console.WriteLine(Big(new Circle(12)));
}İç İçe Özellik Desenleri
Özellik desenleri iç içe yerleştirilebilir. Bir özellik kendisi de bir nesneyse, üyelerini başka bir süslü parantez bloğuyla eşleştirebilirsiniz.
Örneğin { Address: { City: "Paris" } }, tek bir ifadede iki düzey derine iner. Bu, boş değerlerle karşılaşabilecek noktalı erişim zincirlerini önler.
record Address(string City);
record User(string Name, Address Address);
var u = new User("Lin", new Address("Paris"));
bool inParis = u is { Address: { City: "Paris" } };
System.Console.WriteLine(inParis);Genişletilmiş Özellik Erişimi
C# 10'dan itibaren bir özellik deseninin içinde noktalı bir yol kullanabilirsiniz: { Address.City: "Paris" }. Bu, iç içe süslü parantezlerin kısa biçimidir.
Bu yaklaşım, eşleşme sırasında aradaki değerleri yine güvenli biçimde işlerken derin denetimleri okunabilir tek bir satıra indirger.
record Address(string City);
record User(string Name, Address Address);
var u = new User("Lin", new Address("Rome"));
string where = u switch
{
{ Address.City: "Paris" } => "FR",
{ Address.City: "Rome" } => "IT",
_ => "??"
};
System.Console.WriteLine(where);Eşleşmenin Tümünü Yakalama
Özellik deseninden sonra bir ad ekleyerek eşleşen değerin tamamını bir değişkene bağlayabilirsiniz: { Age: > 18 } adult.
adult değişkeni artık kolun içinde nesnenin tamamını belirtir; böylece özelliklerinin sınamayı geçtiğini doğruladıktan sonra nesneyi kullanabilirsiniz.
using System;
record Person(string Name, int Age);
class Program {
static void Main() {
Person p = new("Sam", 40);
string r = p switch {
{ Age: >= 18 } adult => $"{adult.Name} can vote",
_ => "too young"
};
Console.WriteLine(r);
}
}Boş Değerleri İşleme
Bir özellik deseni null ile asla eşleşmez; çünkü incelenecek bir nesne yoktur. Bu nedenle { } (boş süslü parantezler), boş olmayan her değerle eşleşir.
Bu, not null ve { } yapılarını boş değer denetimleri için kullanışlı deyimler hâline getirir ve özellik tabanlı kolların boş girdileri güvenle atlamasını sağlar.
string? maybe = null;
string state = maybe switch
{
null => "missing",
{ Length: 0 } => "empty",
_ => "has text"
};
System.Console.WriteLine(state);Desenler Neden Tür Dönüşümlerinden Daha İyi
Desenlerden önce türe göre dallanmak, is denetimlerinin ardından tür dönüşümleri ve boş değer korumaları yazmak anlamına geliyordu. Tür ve özellik desenleri bunların tümünü tek bir ifadede birleştirir.
Derleyici ayrıca tüm durumların kapsanmasını ve erişilebilirliği izleyerek elle yazılmış if zincirlerinin sessizce gözden kaçırabileceği ölü kolları ve eksik durumları yakalar.
object o = 42;
// Old: if (o is int) { int n = (int)o; ... }
// New:
if (o is int n) System.Console.WriteLine(n + 1);Kısa Sınama
Tür ve özellik desenleriyle ilgili anlayışınızı sınayın.
Özet
Tür desenleri çalışma zamanı türüne göre eşleşir ve türü belirlenmiş bir değişkene bağlanabilir. Özellik desenleri üyeleri { Prop: pattern } ile inceler, iç içe yerleştirmeyi ve noktalı yolları destekler ve null ile asla eşleşmez.
Hem şekle hem de duruma göre dallanmak için bu desenleri birleştirin. Sırada ilişkisel ve mantıksal desenleri ele alacağız.
Sıkça Sorulan Sorular
“Tür ve Özellik Kalıpları” dersi ücretsiz mi?
Evet — “Tür ve Özellik 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 4 dersten oluşur.
“Tür ve Özellik Kalıpları” dersinde ne öğreneceğim?
Biçim ve üyeler üzerinden eşleş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 2. dersidir.
“Tür ve Özellik 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
- switch İfadeleri
- Tür ve Özellik Kalıpları
- İlişkisel ve Mantıksal Kalıplar
- Liste ve Tuple Kalıpları