Yükleniyor...

Pattern Matching

C# dilinde Pattern Matching, nesnelerin tipini ve yapısını çalışma zamanında değerlendirmeyi ve bu desenlere göre belirli işlemler gerçekleştirmeyi sağlayan güçlü bir özelliktir. C# 7.0 ile tanıtılan ve sonraki sürümlerde geliştirilmiş olan Pattern Matching, kodun okunabilirliğini artırır, tip dönüşümlerine olan ihtiyacı azaltır ve daha güvenli, sürdürülebilir kod yazımına imkan tanır.
Pattern Matching, özellikle heterojen koleksiyonlar, karmaşık veri yapıları veya gelişmiş nesne yönelimli modeller ile çalışırken kullanışlıdır. Bu özellik, if-else bloklarını minimize ederek nesnenin tipine veya özelliklerine dayalı kararlar almayı mümkün kılar. Pattern Matching, C#’ın temel kavramları olan sözdizimi, veri yapıları, algoritmalar ve OOP prensipleri ile sıkı bir şekilde bağlantılıdır.
Bu eğitimde, Pattern Matching kullanarak karar mantığını nasıl basitleştirebileceğinizi, kodun bakımını nasıl kolaylaştırabileceğinizi ve algoritmalarınızı nasıl optimize edebileceğinizi öğreneceksiniz. Switch expressions, Property Patterns ve Tuple Patterns gibi yaygın desenler incelenecek ve bellek sızıntıları veya hatalı hata yönetimi gibi yaygın sorunlar ele alınacaktır. Eğitim sonunda, gerçek C# projelerinde güvenli, temiz ve etkili kod yazmak için Pattern Matching’i etkin bir şekilde kullanabileceksiniz.

Temel Örnek

text
TEXT Code
using System;

namespace PatternMatchingExample
{
public class Shape {}
public class Circle : Shape
{
public double Radius { get; }
public Circle(double radius) => Radius = radius;
}
public class Rectangle : Shape
{
public double Width { get; }
public double Height { get; }
public Rectangle(double width, double height) => (Width, Height) = (width, height);
}

class Program
{
static void Main(string[] args)
{
Shape shape = new Circle(5.0);

string result = shape switch
{
Circle c => $"Çemberin yarıçapı: {c.Radius}",
Rectangle r => $"Genişlik: {r.Width}, Yükseklik: {r.Height}",
_ => "Bilinmeyen şekil"
};

Console.WriteLine(result);
}
}

}

Bu örnekte, Shape adlı bir base class ve Circle, Rectangle adlı iki türetilmiş sınıf tanımlanmıştır. Switch ifadesi ile nesnenin tipi çalışma zamanında kontrol edilmekte ve ilgili özellikler güvenli şekilde kullanılmaktadır. _ deseni, bilinmeyen tipler için default durum sağlayarak hata oluşumunu engeller.
Bu yapı, nesne tipini güvenli bir şekilde kontrol etmeyi, özellikleri çıkarmayı ve karar mantığını basitleştirmeyi gösterir. Gerçek projelerde Pattern Matching kullanmak, kodun bakımını kolaylaştırır, okunabilirliği artırır ve güvenli algoritmalar yazmanıza yardımcı olur.

Pratik Örnek

text
TEXT Code
using System;
using System.Collections.Generic;

namespace PatternMatchingAdvanced
{
public abstract class Employee
{
public string Name { get; set; }
protected Employee(string name) => Name = name;
}

public class Manager : Employee
{
public int TeamSize { get; set; }
public Manager(string name, int teamSize) : base(name) => TeamSize = teamSize;
}

public class Developer : Employee
{
public string PrimaryLanguage { get; set; }
public Developer(string name, string language) : base(name) => PrimaryLanguage = language;
}

class Program
{
static void ProcessEmployee(Employee employee)
{
switch (employee)
{
case Manager m when m.TeamSize > 10:
Console.WriteLine($"Kıdemli Yönetici: {m.Name}, ekip boyutu: {m.TeamSize}");
break;
case Manager m:
Console.WriteLine($"Yönetici: {m.Name}, ekip boyutu: {m.TeamSize}");
break;
case Developer d:
Console.WriteLine($"Geliştirici: {d.Name}, ana dil: {d.PrimaryLanguage}");
break;
default:
Console.WriteLine($"Bilinmeyen çalışan tipi: {employee.Name}");
break;
}
}

static void Main(string[] args)
{
var employees = new List<Employee>
{
new Manager("Ayşe", 12),
new Developer("Ali", "C#"),
new Manager("Mehmet", 5)
};

foreach (var emp in employees)
{
ProcessEmployee(emp);
}
}
}

}

Bu ileri seviye örnekte, when koşulu ile birlikte Pattern Matching kullanılarak çalışan tipleri ayrıştırılır ve ek koşullar uygulanır. ProcessEmployee metodu heterojen bir koleksiyonu işler ve her tipe özel özelliklere güvenli bir şekilde erişim sağlar. En iyi uygulamalar, default case kullanımı, anlamlı değişken isimlendirmesi ve kodun net yapısıdır. Pattern Matching, algoritmaların optimizasyonuna, karmaşıklığın azaltılmasına ve kod güvenliğinin artırılmasına yardımcı olur.

C#’ta Pattern Matching için en iyi uygulamalar ve yaygın hatalar:

  • Tüm olası tipler için default case kullanın.
  • when ile ek koşullar uygulayarak if-else karmaşasını azaltın.
  • Gereksiz tip dönüşümlerinden kaçının, Type Patterns kullanın.
  • Switch expressions ile okunabilirliği artırın.
  • Null değer kontrollerini ihmal etmeyin.
  • Kritik performans alanlarında gereksiz nesne üretimini sınırlayın.
  • Değişken isimlendirmelerini anlamlı ve tutarlı yapın.
  • Pattern Matching mantığını dikkatle test edin.
  • SOLID prensiplerine ve C# standartlarına uyun.

📊 Referans Tablosu

C# Element/Concept Description Usage Example
Type Pattern Bir nesnenin tipini kontrol eder ve yerel değişken oluşturur case Circle c: Console.WriteLine(c.Radius);
Property Pattern Bir nesnenin belirli özelliklerini kontrol eder case Rectangle r when r.Width > 10: …
Tuple Pattern Tuple öğelerini kontrol eder case (int x, int y) when x > y: …
Switch Expression Kısa ve okunabilir karar yapısı var result = shape switch { Circle c => c.Radius, _ => 0 };
when Condition Desene ek koşullar ekler case Manager m when m.TeamSize > 10: …

Pattern Matching öğrenmek, güvenli, temiz ve verimli kod yazmayı sağlar. Type Patterns, Property Patterns, Tuple Patterns, switch expressions ve when koşulları temel kavramlardır. Bir sonraki adım olarak Recursive Patterns, Records ve Deconstruction ile Pattern Matching’i LINQ sorgularında uygulamak önerilir. Bu beceriler, back-end geliştirme, API tasarımı ve kurumsal uygulamalarda algoritmik düşünce ve yazılım mimarisi geliştirmek için kritik öneme sahiptir.

🧠 Bilginizi Test Edin

Başlamaya Hazır

Test Your Knowledge

Test your understanding of this topic with practical questions.

3
Sorular
🎯
70%
Geçmek İçin
♾️
Süre
🔄
Deneme

📝 Talimatlar

  • Her soruyu dikkatle okuyun
  • Her soru için en iyi cevabı seçin
  • Quiz'i istediğiniz kadar tekrar alabilirsiniz
  • İlerlemeniz üstte gösterilecek