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.
Map/filter/reduce in a tweet:
— Steven Luscher (@steveluscher) June 10, 2016
map([🌽, 🐮, 🐔], cook)
=> [🍿, 🍔, 🍳]
filter([🍿, 🍔, 🍳], isVegetarian)
=> [🍿, 🍳]
reduce([🍿, 🍳], eat)
=> 💩
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ı
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.
Elimizdeki veri setini simüle eden bir liste tanımladık.
Her şekil için çalışacak ve kare olanlar için true
döndürecek olan metodumuz.
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
değerimiz ile isSquare
metodumuzu temsil ettik ve filter
metodumuza listemizle beraber bu delegemizi geçtik ve sadece kare şekillerimizi aldık.
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, hemIEnumerable
hemIQueryeble
için mevcut aralarında önemli bir fark var,isSquare
metodunuFunc<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
- https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.where?view=net-5.0
- https://docs.microsoft.com/en-us/dotnet/api/system.linq.queryable.where?view=net-5.0
- https://docs.microsoft.com/en-us/dotnet/api/system.predicate-1?view=net-5.0
- FILTER - dotnet fiddle
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. ↩︎