Altbilgi içeriğine atla
Iron Academy Logo
C# öğrenin
C# öğrenin

Diğer Kategoriler

C# Geçiş İfadesi Açıklandı: Tim Corey'den Pratik Bir Rehber

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.

Geleneksel If-Else vs. Switch İfadesi

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 on
if (numberGrade >= 90)
    letterGrade = "A";
else if (numberGrade >= 80)
    letterGrade = "B";
// ...and so on

Bu çalışıyor, ancak çok ayrıntılı. Öte yandan, C# switch ifadeleri daha temiz bir sözdizimi sunar.

Notlandırma için Bir Switch İfadesi Yazma

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"
};
string letterGrade = numberGrade switch
{
    >= 90 => "A",
    >= 80 => "B",
    >= 70 => "C",
    >= 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.

İfadelerle Kodun Basitleştirilmesi

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.

Nesne Türleri ile Desen Eşleştirme Kullanımı

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 { }

record Dog(string Name) : IAnimal;
record Cat(string Title, string Name) : IAnimal;
record Cow(string Breed) : IAnimal;

Farklı 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.

Desen Eşleştirme ile Switch İfadesi

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 (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";

Daha 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"
};
string message = a switch
{
    Dog d => $"Dog: {d.Name}",
    Cat c => $"Cat: {c.Title} {c.Name}",
    Cow co => $"Cow: {co.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.

when Anahtarı ile Opsiyonel Koruyucular

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"
};
int score = 90;

string result = score switch
{
    int s when s >= 90 && s <= 100 => "Excellent",
    int s when s >= 75 => "Good",
    _ => "Needs Improvement"
};

Burada, when cümlesi daha karmaşık boolean ifadeleri kullanarak argümanın özel değerlendirilmesine olanak tanır.

En İyi Uygulamalar ve Son Düşünceler

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.

Özet: Geliştirici Araç Çantanıza Switch İfadeleri Ekleme

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.

Hero Worlddot related to C# Geçiş İfadesi Açıklandı: Tim Corey'den Pratik Bir Rehber
Hero Affiliate related to C# Geçiş İfadesi Açıklandı: Tim Corey'den Pratik Bir Rehber

Sevdiğiniz Şeyleri Paylaşarak Daha Fazla Kazanın

.NET, C#, Java, Python veya Node.js ile çalışan geliştiriciler için içerik oluşturuyor musunuz? Uzmanlığınızı ek gelire dönüştürün!

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara