Action, Func ve Predicate Delegeleri

Delegeler metodları işaret eden ve işaret ettikleri metodlarla aynı imzaya sahip olan yani aynı tipte parametrelere ve dönüş değerlerine sahip olan yapılardır.  Delegeleri event tabanlı programlamada, asenkron programlamada, thread programlamada vb bir çok yerde kullanırız. Makalenin asıl amacı genel olarak delege yapısı olmadığı için detaylarına girmeyeceğim.

Pekala yazımızın konusu olan Action, Func ve Predicate neyi temsil eder? Başlıktan da anlaşılacağı üzere bunlar da .Net framework içerisinde bulunan, bizler için önceden hazırlanmış olan delegelerdir. Çok fazla kelimelerle uğraşmadan kod üzerinde görelim.

Action delegesinin imzasına baktığınızda aşağıdaki gibi bir kod göreceksiniz.

Burada Action delegemizin T tipinde yani herhangi bir tipte parametre alan sonrasında da void dönüş yapan metodları işaret edebildiğini görüyoruz.

Örneğin normal delegeler ile aşağıdaki şekilde yazdığımız bir kodu

Action delegesi ile aşağıdaki gibi yazabiliriz.

Action delegesi olduğunun farkına varmasak da kodlarımız içinde lambda ile birlikte bu delegeyi oldukça fazla kullanmaktayız. Örneğin aşağıdaki kodda (kodun anlamsız olduğunun farkındayım amaç net şekilde gösterebilmek 🙂 )

ForEach methodunun tanımına gittiğimizde Action tipinde bir parametre aldığını görebiliriz.

Yani aslında biz ForEach içerisine long tipinde bir değer alan ve içerisinde bu değerin karesini alıp MessageBox ile gösteren bir fonksyion yazdık.

Func delegesi Action’a benzer bir yapıdadır ama Actiondan farklı olarak bir dönüş değeri vardır. Func delegesinin tanımlarına baktığımızda iki farklı kullanım görebiliriz. Hiç parametre almadan bir değer dönebilir.

Ya da bir parametre alıp bir değer dönebilir.

Aşağıdaki kod örneğinde butonun click eventinde öncelikle Func delegesi parametre almayıp string dönen bir metodu işaret ederken, sonrasında delegemiz string bir değişken alıp, string bir değişken dönen bir metodu işaret etmektedir.

Func delegesini de farkında olmasak da linq sorgularımızda kullanmaktayız.  Listeler üzerinde çalıştırdığımız Select , Where vb komutlarında tanımlarına baktığımızda Func tipinde parametre aldıklarını görürüz.

Predicate delegesi ise tam olarak Func<T, bool> parametresinin yaptığı işi yapar. Yani herhangi bir tipteki değişkeni alır ve geriye boolean bir değer döner.  Kullanımı da benzer şekildedir.

Kısa bir şekilde Action, Func ve Predicate delegelerini ve kullanımlarını anlatmaya çalıştım. Eğer herhangi bir sorunuz, eleştiriniz, öneriniz varsa yorum yazarsanız sevinirim.

Çevik Kalın 🙂

 

Leave a Reply

Your email address will not be published. Required fields are marked *