Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
9m 16s
C# geliştirme dünyasında, temiz ve sürdürülebilir kod yazmak önemli bir hedeftir. Bunu başarmayı sağlayan modern bir C# özelliği ise geleneksel switch ifadesine kompakt ve güçlü bir alternatif olarak switch ifadensidir. Genellikle göz ardı edilse de switch ifadeleri, ilişkisel desenler, desen eşleşmeleri ve sabit desenlerle uğraşırken özellikle karmaşık dallanma mantığını basitleştirir.
Bu özelliğin nasıl çalıştığını ve geleneksel yaklaşımlarla nasıl karşılaştırıldığını daha iyi anlamak için, Tim Corey'nin hazırladığı faydalı bir videoyu ele alacağız. Tim, "Switch Yapıları C#'da" başlıklı videosunda, C#'daki switch yapılarının gerçek dünya kullanımını açıklayarak daha az satırla daha iyi kod yazmanın yollarını göstermektedir.
Tim'in pratik açıklamasına dalalım; bu, bir not verme örneğiyle başlar ve arayüzler, tür kalıpları ve nesne değerlendirmesi kullanarak daha gelişmiş senaryolara doğru ilerler.
Tim, bir test puanı olan 85 gibi bir değeri tutan numberGrade adlı bir int değişkeninin bulunduğu bir konsol uygulaması ile başlar. Amaç, bu sayısal giriş değerini, 'B' gibi karşılık gelen bir harf notuna dönüştürmektir. Çoğu durumda, geliştiriciler bir dizi if-else deyimi ya da bir switch deyimi kullanır, bu şekilde:
if (numberGrade >= 90)
letterGrade = "A";
else if (numberGrade >= 80)
letterGrade = "B";
// ...and so onIf numberGrade >= 90 Then
letterGrade = "A"
ElseIf numberGrade >= 80 Then
letterGrade = "B"
' ...and so on
End IfBu çalışıyor, ancak çok ayrıntılı. Öte yandan, C# switch ifadeleri daha temiz bir sözdizimi sunar.
Bir switch ifadesini göstermek için, Tim yukarıdaki mantığı aşağıdaki kodla yeniden yazar:
string letterGrade = numberGrade switch
{
>= 90 => "A",
>= 80 => "B",
>= 70 => "C",
>= 60 => "D",
_ => "F"
};Dim letterGrade As String =
If(numberGrade >= 90, "A",
If(numberGrade >= 80, "B",
If(numberGrade >= 70, "C",
If(numberGrade >= 60, "D", "F"))))Burada, switch anahtar kelimesi yeni bir bağlamda kullanılmaktadır—bir ifade olarak, bir deyim değil. Bu, doğrudan bir değere değerlendiği ve bir değişkene (letterGrade gibi) atanabileceği anlamına gelir.
Bu form, ilişkisel kalıpları (örneğin, >= 90) destekler ve varsayılan durumu ele almak için final else'e denk gelen ayırma kalıbını (_) kullanır.
Tim, derleyicinin çalıştırma sırasında eşleşmeyi belirlediğini, her koşulu yukarıdan aşağıya kontrol ettiğini ve girdiye uyan ilk deseni seçtiğini belirtir.
Tim'in sözleriyle, bu yeni sözdizimi "bir sürü kodun yerini alır." else if ile koşulları tekrarlamak yerine, switch ifadesi her şeyi net ve öz bir yapıda ele alır. Bu, kontrol akışını basitleştirir, okunabilirliği artırır ve mantığınızda tekrarı azaltır.
Bu yapının özellikle girdi değerlerini belirli çıktılara eşleştirirken - notlandırma, durum mesajları veya veri dönüşümü gibi - kullanışlı olduğunu vurguluyor.
Tim, tür desenlerini ve desen eşleştirmeyi keşfetmek için IAnimal arayüzünü içeren bir senaryo sunmaktadır. Her biri bu arayüzü uygulayan üç sınıf tanımlar — Dog, Cat ve Cow. Bu, ona her biri farklı özelliklere sahip hayvanların bir listesini oluşturma olanağı tanır.
interface IAnimal { }
record Dog(string Name) : IAnimal;
record Cat(string Title, string Name) : IAnimal;
record Cow(string Breed) : IAnimal;Interface IAnimal
End Interface
Record Dog(Name As String)
Implements IAnimal
End Record
Record Cat(Title As String, Name As String)
Implements IAnimal
End Record
Record Cow(Breed As String)
Implements IAnimal
End RecordFarklı hayvan örnekleri içeren bir listeyi doldurur ve nesne türünü tanımlamak ve veriyi çıkarmak için tür deseni eşleştirmeyi nasıl kullanacağını gösterir.
Tim, aşağıdaki kodun if deyimlerini kullanarak nasıl çalıştığını gösteriyor:
if (a is Dog d)
message = $"Dog: {d.Name}";
else if (a is Cat c)
message = $"Cat: {c.Title} {c.Name}";
else if (a is Cow co)
message = $"Cow: {co.Breed}";
else
message = "Unknown animal";If TypeOf a Is Dog Then
Dim d As Dog = DirectCast(a, Dog)
message = $"Dog: {d.Name}"
ElseIf TypeOf a Is Cat Then
Dim c As Cat = DirectCast(a, Cat)
message = $"Cat: {c.Title} {c.Name}"
ElseIf TypeOf a Is Cow Then
Dim co As Cow = DirectCast(a, Cow)
message = $"Cow: {co.Breed}"
Else
message = "Unknown animal"
End IfDaha kompakt ve okunabilir bir switch ifadesiyle değiştirilebilir:
string message = a switch
{
Dog d => $"Dog: {d.Name}",
Cat c => $"Cat: {c.Title} {c.Name}",
Cow co => $"Cow: {co.Breed}",
_ => "Unknown animal"
};Dim message As String =
If(TypeOf a Is Dog, $"Dog: {DirectCast(a, Dog).Name}",
If(TypeOf a Is Cat, $"Cat: {DirectCast(a, Cat).Title} {DirectCast(a, Cat).Name}",
If(TypeOf a Is Cow, $"Cow: {DirectCast(a, Cow).Breed}",
"Unknown animal")))Bu ifade, nesnenin türünü kontrol eder ve eşleşen desene göre doğru çıktıyı uygular. Eşleşme bulunamazsa, _ yedek sonuç olarak kullanılır.
Bu özellik, açıklıktan ödün vermeden işlevselliği artırır. Çalışma zamanı davranışı tahmin edilebilir ve okunabilir kalır.
Tim'in örneğinde gösterilmese de, switch ifadelerinin bir opsiyonel boolean koşulu uygulamak için when anahtarıyla genişletilebileceğini belirtmek önemlidir:
int score = 90;
string result = score switch
{
int s when s >= 90 && s <= 100 => "Excellent",
int s when s >= 75 => "Good",
_ => "Needs Improvement"
};Dim score As Integer = 90
Dim result As String = score Select Case
Case s When s >= 90 AndAlso s <= 100
Return "Excellent"
Case s When s >= 75
Return "Good"
Case Else
Return "Needs Improvement"
End SelectBurada, when cümlesi daha karmaşık boolean ifadeleri kullanarak argümanın özel değerlendirilmesine olanak tanır.
Tim, önemli bir kavramı vurguluyor: switch ifadeleri kodunuzu daha kompakt hale getirir, ancak kompakt her zaman daha iyi demek değildir. Bazen, özellikle karmaşık mantık veya belirsiz girdilerle başa çıkarken, geleneksel bir switch deyimi veya if bloğu daha uygun olabilir.
Her durumda switch ifadesi kullanmak zorunda değilsiniz—görev için doğru aracı kullanın. Bu, Tim'in şaka yaptığı gibi, "switch kültüne katılmak" meselesi değildir. Sisteminize bakılabilir ve anlaşılır kod yazmakla ilgilidir.
C# switch ifadeleri, sabit, ilişkisel ve tür desenlerini kullanarak girdi kalıplarına dayalı değerleri değerlendirmek ve geri döndürmek için modern, temiz bir yol sunar. Mantığı basitleştirmek, şablon kodu azaltmak ve okunabilirliği artırmak istediğinizde idealdirler.
Tam sayıları derecelendirmeden hayvan nesnelerini tanımlamaya kadar, Tim Corey'nin videosundaki aşağıdaki örnekler, bunların pratik kullanımlarını vurguluyor. Sonuçları hesaplayan bir fonksiyon oluşturmak, kullanıcı girdiği ile başa çıkmak veya null ve tanımsız durumlarla çalışmak gibi senaryolarda, switch ifadeleri zaman tasarrufu sağlayabilir, hataları azaltabilir ve kod tabanınızı yönetilebilir hale getirebilir.
Tim'in dediği gibi, "Kolaylaştırıcı ve temizleyici bir araç çantanıza eklemek için gerçekten yardımcı bir araçtır ve yine de anlaşılır, eğer daha anlaşılır değilse."
Eğer C# kod kalitenizi iyileştirmek ve .NET Core yeniliklerini kaçırmak istiyorsanız, switch ifadelerini atlamayın. Bunları deneyin, Visual Studio projelerinizde deney yapın ve mantığınızın ne kadar temiz hale gelebileceğini görün.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy