Action ve Predicate nedir?

Delegate konusu içerisinde incelenebilecek,özel delegelerden olan Generic Predicate<> ve Action<> delegelerinden bahsedeceğim.

Predicate

List employees = new List();
employees.Add(new Employee("başkan", 3000));
employees.Add(new Employee("yardımcı", 2000));
employees.Add(new Employee("işçi", 100));

Böyle bir liste yaratıyoruz.Diyelim ki yönetim bizden ücreti 1500 den fazla olan çalışanların listesini istedi.

Demek ki FindAll metodu işimize yarayacak yani çalışanlarımız içerisinde istediğimiz şartı sağlayan tüm işçilerin listesini getirebilecek. Metodun aldığı parametreye bakıldığında ise Employee tipinden generic Predicate delegesi beklediğini görüyoruz. O zaman nedir bu predicate bir bakalım.Tanımı;
2
Yani Predicate<> öyle bir delege ki içerisinde generic bir parametre alan ve geriye bool döndüren metotları taşıyabilir.O halde gidip bu imzaya sahip bir metot geliştirelim.

bool Greaterthanx(Employee emp)
{
    return (emp.Salary>1500)?true:false;
}

Artık bu metodu FindAll metodu içerisinde çağırabiliriz ve sonuç kümesini yine bir listede saklayabiliriz.

results generic listinin elemanlarına bakıldığında maaşı 15000 den buyuk oyuncuların listesi olduğunu görebilirsiniz.Ayrıca yine .Net 2.0 ile gelen Anonymous Method yazım şekli ile metodu ayrı bir blokta yazmadan da FindAll metodu içerisinde çağırabiliriz.

Action 

Maaşı 15000’den fazla olan işçilerin maaşlarında %10 indirime gidilmesi istenirse?
5
Açıklamasına bakıldığında aslında tek bir metotla elimdeki listenin hepsine istediğim algoritmayı uygulayabileceğimi anlıyorum. Ama metot Employee generic parametresi alan bir Action<> delegesi istiyor. Peki yine önce bu delegeyi tanıyalım.

Baktığımızda Action delegesinin içerisine generic bir parametre alan ve geriye dönüş tipi void olan metotları taşıyabildiğini görüyoruz.O halde istediği metodu yazalım.

void Decraese(Employee emp)
{
    emp.Salary-=0.10;
}

Sonuç olarak alttaki gibi delegemizi parametre olarak kullandığımızda;
7
Artık results listesindeki çalışanların maaşlarında % 10 oranında indirime gidildiğini görebiliriz

Başka bir Action;
Action MyAction = y => Console.Write(y);
MyAction(“Hello”)

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s