Lambda İfadeleri

Tek bir abstract metodu olan İnterfaceleri anonim bir class olarak yazmakta kullanılabilir.

  • Tek abstract metoda sahip olan Interfacelere Fonksiyonel Interfaceler denir. Ve bunlar Lambda ifadeleri ile kullanılabilir.
  • Lambda ifadeleri içerisinde tanımlandığı bloğun içindeki veri elemanlarına erişebilir.

Fakat erişimde bulundugu veri elemanının Final olması zorunludur(Effectively Final).Sebebi Lambda ifadesinin ne zaman çagrılcağı belli olmadığı için o değişkenin değerinin lambdadan sonra kullanılmasını engellemek içindir.

  • Eğer böyle bir veri elemanı kullanılacaksa bu eleman okunurluk açısından direk Final olarak bildirilmesi iyi bir taktiktir.
  • Listener interfacelerinde onClick tarzı tek bir metod override edilirken sıklıkla kullanılır.

Farklı parametre almalarından dolayı 8 farklı tanımı mevcuttur.

Parametresiz metodları için

  • ()->
IX ix = () -> System.out.println();
  • ()->{}
IX ix = () ->
{
  System.out.println();
  //...
};

Parametreli metodlar için

  • a->

    IX ix = (a,b) -> a+b;// parametre isimlerini bu kullanımda a,b yap
    //Parametre olarak verilen degerleri (a ve b yi) topla
    
  • a->{}

    IX ix = (a,b)-> 
    {
     a+b;
     System.out.println(a + "+" + b + "=" a+b);
    };
    
    • a ve b nin faaliyet alanı ok işaretinin sağıdır.

    • Lamda ifadesi yazılırken parametre adının (a , b) şekilnde belirtilmesinin sebebi Lambda ifadesi içerisinde bu parametreleri kullanabilmektir.

    • Tek satır olan ifadelerde geri dönüş değeri olan metodlarda return kullanmamıza gerek yoktur.

  • (paramatre listesi)->

  • (paramatre listesi)->{}

  • (Parametre< Tur >)->

  • (Parametre< Tur >)->{}

Örnek

Lambda ifadesiyle kullanım


public static void main(String []args)
{
    Ix ix = () -> {System.out.println("foo"); return10;};
    ix.foo();
}

interface IX
{
    int foo();
}

Lambda ifadesi yerine Anonim Sınıfla kullanım


public static void main(String []args)
{
    Ix ix = new anonimClass(){
        @Override
        public int foo()
        {
            System.out.println("foo");
            return10;
        }
    };
    ix.foo();
}


interface IX
{
    int foo();
}

Butonun OnClickListener Kullanım Örneği

Lambda İfadesiyle kullanım

private void init()
{
    m_buttonTest = (Button)this.findViewById(R.id.MAINACTIVITY_BUTTON_OK);

    m_buttonTest.setOnClickListener((view)->Toast.makeText(MainActivity.this , "Buton Tiklandi", Toast.LENGTH_SHORT).show());

}

Anonim Sınıfla kullanım

    private void init()
    {
        m_buttonTest = (Button)this.findViewById(R.id.MAINACTIVITY_BUTTON_OK);
        m_buttonTest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view)
            {
                Toast.makeText(MainActivity.this , "Buton Tiklandi", Toast.LENGTH_SHORT).show();
            }
        });
    }