• Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim
KodEdu
  • Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim

Java 8 – Lambda İfadeleri ve Fonksiyonel Arayüzler

  • Posted by Kodedu
  • Categories backend, Genel, Uncategorized, Yazılar
  • Date 28 Mart 2014

Merhaba arkadaşlar;

Bugün sizlerle fonksiyonel arayüzlerden (Functional Interfaces) ve Lambda ifadeleri (Lambda Expressions) ile olan ilişkisinden basetmek istiyorum.

Functional Interfaces
Tek bir soyut metodu bulunan arayüzlere fonksiyonel arayüz denir. İki veya üç değil, yalnızca bir tane soyut metodu olmalı. Peki neden “1” dersek sebebinin Lambda ifadelerine dayandığını söylemek isterim.

Örneğin;

Şöyle bir Lambda ifademiz olsun;

fn(x,y) -> 2*x + y

Bu Labmda deyimini örneğin Javascript gibi bir dil ile temsil etmek isteseydik şöyle yazabilirdik;



function(x , y) {

   return 2*x+y;

}

Peki fn(x,y) -> 2*x + y Lambda ifadesini Java programlama dilinde nasıl yazabiliriz?

Java 8 geliştirilirken, geliştirim takımı kendilerine bu soruyu sormuş ve yanıt olarak fonksiyonel arayüzler kullanarak ihtiyacı karşılamışlar.

Şöyle ki; Bir Lambda ifadesi, Java derleyicisi tarafından, bir Java arayüzünün (tek bir soyut metodu olmalı) nesnel karşılığına (implementation) dönüştürülmektedir.

Örneğin, fn(x,y) -> 2*x + y Lambda ifadesi, aşağıdaki fonksiyonel arayüze dönüştürülebilirdir. Çünkü fonksiyon x ve y adında iki parametre almakta ve 2*x + y ile tek bir değer döndürmektedir. Tabi burada x ve y’ nin tipleri ne? dersek, herhangi bir matematiksel tip olabilir. Biz burada sabit bir tip (int gibi) verebilir, veya jenerik tiplemeler de yapabiliriz. Fakat şu anlık bununla yetinelim.


@FunctionalInterface // Opsiyonel
interface Foo{

int apply(int x, int y);

}

Şimdi bu Lamda ifadesini uygulamamızda kullanalım.

Örnek 1:

Lambda ifadeleri atama sırasında kullanılabilir.



Foo foo = (x,y) -> (2*x+y);

int sonuc = foo.apply(3,4);

System.out.println("Sonuç: "+sonuc); // Çıktı: 10

// veya

Foo foo = (x, y) -> Math.pow(x,y);

int sonuc = foo.apply(3,2);

System.out.println("Sonuç: "+sonuc); // Çıktı: 3*3 = 9

Örnek 2:

Lambda ifadeleri, metod parametrelerinde de tanımlanabilir.



class Bar{

public int calculate(Foo foo, int x, int y){
return foo.apply(x,y);
}
}

Bar bar = new Bar();

int sonuc = bar.calculate( (x,y) -> (2*x+y) , 3, 4 );

System.out.println("Sonuç: "+sonuc); // Çıktı: 10

Java programlama dilinde fonksiyon ifadesi pek kullanılmaz, onun yerine metod ifadesi kullanılır. Java metodları tek başına birer eleman değildir, diğer bir dil elemanının (sınıf, enum, interface ..) dahilinde tanımlanırlar. Javascript gibi dillerde ise fonksiyonlar tek başına birer elemandır, diğer bir dil elemanının içinde olmak zorunluluğu yoktur. Bu sebeple Java ortamında, bir Lambda ifadesinden bir fonksiyona/metoda/iş birimine dönüşüm için fonksiyonel arayüzler kullanılmaktadır.

Tekrar görüşmek dileğiyle..

Tag:backend, functional interfaces, lambda expression, project lambda

  • Share:
author avatar
Kodedu

Previous post

Java 8 - Lambda Expression nedir? Nasıl kullanırım?
28 Mart 2014

Next post

Java 8'de Tarih ve Saat İşlemleri
5 Nisan 2014

You may also like

api-logo
Swagger Nedir? Neden kullanılır?
10 Ekim, 2018
spring-cli-logo
Spring CLI ile Spring Boot Projeleri Hazırlamak
21 Ağustos, 2017
eureka_architecture
Spring Cloud Netflix ve Eureka Service Discovery
3 Temmuz, 2017

    1 Comment

  1. Tolga
    6 Şubat 2017
    Cevapla

    Harika bir anlatım, kısa ve öz. Java Tutorials’ta Lambda Expressions bölümü kafamı epey kurcalamıştı ama bu yazıyla meselenin özünü daha iyi kavramış oldum. Teşekkürler.

Leave A Reply Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta listesine kayıt olun!






Gözde yazılar

Webiner : Java 8 | Project Lambda
07Ara2012
Java EE 8 için yeni plan yolda!
13Eki2016
Swagger Nedir? Neden kullanılır?
10Eki2018
Upucuz ARM Geliştirme Kiti – Kinetis KL25Z
01Eyl2012

Son Yazılar

  • Java’da Record’lar 27 Ocak 2020
  • Swagger Nedir? Neden kullanılır? 10 Ekim 2018
  • Spring CLI ile Spring Boot Projeleri Hazırlamak 21 Ağustos 2017
  • Spring Cloud Netflix ve Eureka Service Discovery 3 Temmuz 2017
  • Online React.js Eğitimi ardından (15-25 Mayıs 2017) 31 Mayıs 2017

Son Yorumlar

  • Naïve Bayes Sınıflandırma Algoritması için Rahman Usta
  • Naïve Bayes Sınıflandırma Algoritması için Mete
  • YAML Nedir? Neden YAML Kullanmalıyız? için kara
  • JWT (JSON Web Tokens) Nedir? Ne işe yarar? için Furkan
  • YAML Nedir? Neden YAML Kullanmalıyız? için shahriyar

Get Java Software

Arşivler

Bizi takip edin

React.js Eğitimi Başlıyor
11-22 Eylül, 2017
Eğitmen
Rahman Usta
İletişim

merhaba@kodedu.com

  • Hakkında
  • Gizlilik Politikası
  • İletişim
  • Referanslar
Kodedu Bilişim Danışmanlık
Cemil Meriç mah. Çelebi sok.
No:16/3 Ümraniye/İSTANBUL
Tel: 0850 885 38 65
Alemdağ V.D.: 8960484815

KODEDU © Tüm hakları saklıdır.