C# İle Fonksiyonel Programlama - Filter

Giriş

Önceki yazımızda fonksiyonel programlama yöntemlerinden olan map 1 yönteminden bahsettik. Bu yazımızda kısaca filter işleminden bahsedecek, bir sonraki yazımızda ise reduce üzerine eğileceğiz.

Önceki yazımda eklediğim Steven Luscher’ın tweetini, bu yazıda tekrar eklemek istiyorum.

Filter

Filter yöntemini uygulayabilmek için, boolean döndüren bir metota ihtiyacımız var.

Bu metot, bir delege veya expression olabilir. 2

C# ile filter için kullanılacak metodun, listenin elemanları için true ✅ veya false ❌ döndürmesi gerekiyor.

Basit bir filter uygulaması

Types

Amacımız, elimizdeki bir şekil listesinden kare olanları seçmek. Elimizdeki metot:

  • Listemizdeki her eleman için çalışacak,
  • Kare olanlar için true döndürecek,
  • Böylece sadece kare şekilleri ayıklayabileceğiz.

Shapes Elimizdeki veri setini simüle eden bir liste tanımladık.

Is Square

Her şekil için çalışacak ve kare olanlar için true döndürecek olan metodumuz.

Filter

filter metodumuzun ikinci parametresi bir delege, diğer ifadeyle metotu temsil eden bir değer. C# ile metotları parametre olarak geçebilmemizi sağlayan Func<T, bool> delegemize teşekkür ediyoruz.

Predicate with Func delegate predicate değerimiz ile isSquare metodumuzu temsil ettik ve filter metodumuza listemizle beraber bu delegemizi geçtik ve sadece kare şekillerimizi aldık.

Filter

Sonuç

Uygulamasını yaptığımız filter yöntemini LINQ içerisindeki karşılığı .Where extension metotlarıdır. Amacımız filter çalışma yöntemini kavramak ve delegelerle basit bir uygulamasını yapmaktı.

Yazı kapsamına almadığım aşağıdaki noktalar, ilerideki yazılarımızın konularına dahil olsa da aşağıdaki bağlantılar kısmından ilgili döküman sayfalarını okumanızı tavsiye ederim.

  • .Where extension metodu, hem IEnumerable hem IQueryeble için mevcut aralarında önemli bir fark var,
  • isSquare metodunu Func<Shape> delegesi türüyle temsil etmiştik. Predicate<Shape> delege türüyle de temsil edebilirdik,
  • isSquare metodunu, Lambda expression olarak tanımlayabilirdik,

Yazıyı sonuna kadar okuduğunuz için teşekkürler, her türlü geri bildirim ve eleştirilerinizi yorum olarak belirtebilirsiniz.

Bağlantılar

  1. https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.where?view=net-5.0
  2. https://docs.microsoft.com/en-us/dotnet/api/system.linq.queryable.where?view=net-5.0
  3. https://docs.microsoft.com/en-us/dotnet/api/system.predicate-1?view=net-5.0
  4. FILTER - dotnet fiddle

  1. C# İle Fonksiyonel Programlama - Map ↩︎

  2. Delegelere C# İle Fonksiyonel Programlamaya Giriş - Delegeler yazımızda giriş yapmıştık. Expression konusu ise geniş kapsamlı bir konu, ileride geniş şekilde yer vermeyi planlıyorum. ↩︎